面试官:Go方法值接收者和指针接收者的区别?

大家好,我是木川

一、值接收者

  • 值接收者将方法关联到结构体(或其他类型)的实际值上。

  • 当通过值接收者调用方法时,它在方法内部操作该值的副本,而不会影响原始值。

  • 值接收者通常用于不需要修改原始对象的方法,或者对象较小且拷贝的开销较小的情况。

示例代码

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 面试题讲解视频

77351ebb7e83064c63b84aac97a4053d.jpeg

f06c44cddf3f80e04841a3a779b6e053.png

如果对你有帮助,帮我点一下在看或转发,欢迎关注我的公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值