知识卡片
定义类型让数值携带单位语义
内容
Go 允许以任意已有类型(不只是 struct)为基础定义新类型,比如分别用 float64 定义出 Liters 和 Gallons 两个类型。发散:这是把领域知识(这个数字的业务含义是什么) 嵌入类型系统的通用技巧,不只适用于度量单位,也适用于任何”同一底层类型、不同业务含义”的场 景,比如用户 ID 和订单 ID 都是 string 时。
参考来源
- 位置:《Head First Go语言程序设计》第9章《我喜欢的类型:定义类型》(源文件:_epub-src/index_split_002.html)
- 结论依据:原文在该章节围绕“Go允许以任意已有类型(不只是struct)为基础定义新类型,比如分别用float64定义出Liters和Ga…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。
- 原始内容:这个模式在Date类型上定义SetMonth和 SetDay方法。我们只需要在方法中使用指针接收器即可。在调用方法 时,Go会自动把接收器转换为指针,并且在修改struct字段时能够把指 针转换回struct值。 在main函数中,我们创建了一个Date struct的值;通过新的方法设 置了它的Year、Month和Day字段;并且输出…