主要观点:讨论了如何创建一个必须为公共的简单结构体Address
,同时要能将 JSON/YAML 数据编组/解组到其中,而又要使其不可变。给出了几种做法及讨论。
关键信息:
- 原始的
Address
结构体字段为公共的,导致对象可变。 - 有人使用
type Address struct { _Address struct { Street string; City string; ZipCode int } }
并编写Street(), City(), ZipCode()
获取器,但认为这绕开语言太多。 - 有人认为可将字段设为私有并手动实现编组。
- 对于需要 JSON 可编组/解组的“外部”
AddressExt
结构体,字段需导出且可变。对于“内部”AddressInt
结构体,字段应未导出且不可变,需有函数将“外部”地址值映射到“内部”地址类型。
重要细节: - 给出了https://go.dev/play/p/Ns1SDE_PRko作为手动编组的工作示例。
- 强调了不同做法的优缺点和适用性,不同人有不同看法和做法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。