大家好,我是木川
一、值接收者
值接收者将方法关联到结构体(或其他类型)的实际值上。
当通过值接收者调用方法时,它在方法内部操作该值的副本,而不会影响原始值。
值接收者通常用于不需要修改原始对象的方法,或者对象较小且拷贝的开销较小的情况。
示例代码
type MyStruct struct {
Value int
}
func (s MyStruct) SetValue(newValue int) {
s.Value = newValue // 不会影响原始对象
}
二、指针接收者
指针接收者将方法关联到结构体的指针上。
当通过指针接收者调用方法时,它在方法内部直接操作原始对象,而不是副本。
指针接收者通常用于需要修改原始对象的方法,或者对象较大以至于拷贝开销较大的情况。
示例代码
type MyStruct struct {
Value int
}
func (s *MyStruct) SetValue(newValue int) {
s.Value = newValue // 会修改原始对象
}
三、总结
需要根据具体需求和设计考虑来选择方法的接收者类型,通常我们使用指针类型作为方法的接收者的理由:
使用指针类型能够修改调用者的值
使用指针类型可以避免在每次调用方法时复制该值,在值的类型为大型结构体时,这样做会更加高效
最后给自己的原创 Go 面试小册打个广告,如果你从事 Go 相关开发,欢迎扫码购买,目前 10 元买断,加下面的微信发送支付截图额外赠送一份自己录制的 Go 面试题讲解视频
如果对你有帮助,帮我点一下在看或转发,欢迎关注我的公众号