将结构成员作为Golang中的指针是否常见?

时间:2015-10-27 06:16:30

标签: pointers struct go

go github package为例。几乎每个定义的结构的每个成员都是一个指向值而不是值的指针。

这是惯用的Go吗?为什么呢?

我知道它减小了struct的大小(假设指针的大小小于它指向的值的大小),如果你按值传递结构很多,这可能很重要。但是为什么不使用值结构并通过指针传递结构呢?

1 个答案:

答案 0 :(得分:12)

在github包中,原因是大多数结构都是从github api中的json序列化/反序列化的。

他们使用*int而不是int的原因是因为指针的零值为nil,而int的零值为0 。它允许客户在#34之间进行辩护;该字段未包含在响应中#34;和"该字段的值为零"。

这对于像时间这样的事情特别有用,如果你没有nilable类型,你最终会得到很多00-00-0000类型的日期。