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


    大家好,我是木川

    一、值接收者

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

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

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

    示例代码

    1. type MyStruct struct {
    2.     Value int
    3. }
    4. func (s MyStruct) SetValue(newValue int) {
    5.     s.Value = newValue // 不会影响原始对象
    6. }

    二、指针接收者

    • 指针接收者将方法关联到结构体的指针上。

    • 当通过指针接收者调用方法时,它在方法内部直接操作原始对象,而不是副本。

    • 指针接收者通常用于需要修改原始对象的方法,或者对象较大以至于拷贝开销较大的情况。

    示例代码

    1. type MyStruct struct {
    2.     Value int
    3. }
    4. func (s *MyStruct) SetValue(newValue int) {
    5.     s.Value = newValue // 会修改原始对象
    6. }

    三、总结

    需要根据具体需求和设计考虑来选择方法的接收者类型,通常我们使用指针类型作为方法的接收者的理由:

    • 使用指针类型能够修改调用者的值

    • 使用指针类型可以避免在每次调用方法时复制该值,在值的类型为大型结构体时,这样做会更加高效

    最后给自己的原创 Go 面试小册打个广告,如果你从事 Go 相关开发,欢迎扫码购买,目前 10 元买断,加下面的微信发送支付截图额外赠送一份自己录制的 Go 面试题讲解视频

    77351ebb7e83064c63b84aac97a4053d.jpeg

    f06c44cddf3f80e04841a3a779b6e053.png

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

  • 相关阅读:
    03Redis-五大基本数据类型
    基于永磁同步发电机的风力发电系统研究(Simulink实现)
    C++构造函数中不能使用多态
    Nacos介绍以及使用
    9 种方法使用 Amazon CodeWhisperer 快速构建应用
    Excel基础2
    项目中屏幕适配
    Vue3+Vite实现工程化,ref初次接触响应式和setup语法糖
    c++ memccpy和 = 都可以用于赋值操作
    C语言-操作符详解(5)
  • 原文地址:https://blog.csdn.net/caspar_notes/article/details/133533484