请注意,FAQ确实提到了一致性
接下来是一致性。如果该类型的某些方法必须具有指针接收器,则其余方法也应该具有指针接收器,因此无论如何使用该类型,方法集都是一致的。有关详细信息,请参见有关方法集的部分。
如本线程所述:
关于指针与接收器的值的规则是,可以在指针和值上调用值方法,但是只能在指针上调用指针方法
现在:
有人可以告诉我一个值接收器比指针接收器更有意义的情况吗?
该代码评审意见可以帮助:
粗体部分例如在中找到net/http/server.go#Write()
:
// Write writes the headers described in h to w.
//
// This method has a value receiver, despite the somewhat large size
// of h, because it prevents an allocation. The escape analysis isn't
// smart enough to realize this function doesn't mutate h.
func (h extraHeader) Write(w *bufio.Writer) {
...
}