Struct、方法与指针接收者
struct 将相关字段组合成一个新类型;方法是带接收者的函数。
type Counter struct {
value int
}
func (c *Counter) Increment() {
c.value++
}
func (c Counter) Value() int {
return c.value
}
Increment 使用指针接收者 *Counter,所以能修改调用者对象;Value 只读取数据,使用值接收者即可。
选择指针接收者的常见原因:需要修改接收者,或避免复制较大的 struct。一个类型的方法最好保持一致的接收者风格;尤其当某些方法使用指针接收者时,通常其他方法也使用指针接收者,以避免方法集带来的困惑。
不要把 nil 指针当作普通状态使用。调用可能解引用字段的方法前,要明确其是否允许 nil 接收者。