以
go github package为例.几乎每个定义的结构的每个成员都是一个指向值而不是值的指针.
这是惯用的Go吗?为什么?
我知道它减少了结构的大小(假设指针的大小小于它指向的值的大小),如果你通过值大量传递结构,这可能很重要.但是为什么不使用值结构并通过指针传递结构呢?
在github包中,原因是大多数结构都是从github api的json序列化/反序列化的.
他们使用* int而不是int的原因是因为指针的零值是nil,而int的零值是0.它允许客户端在“此字段未包含在响应中”和“值之间”之间存在差异该字段为零“.
这对于像时间这样的事情特别有用,如果你没有nilable类型,你最终会得到很多00-00-0000类型的日期.