Giving_Mu 2021-07-05 15:12 采纳率: 0%
浏览 20

golang的method是如何和对象绑定的?

既然golang的method并不是对象的成员,那么它是怎么和对象绑定的呢?
答案是通过receiver,我想了解的更深入一些。
我目前查到的资料只是说method和function没有什么不同,只不过method多了一个receiver,调用method的时候会把receiver当作参数传给method这个函数。介绍也就到这个层面就结束了。
但是,显然
method: func (r *receiver)SetName(name string)

function: func SetName(r *receiver, name string)
是不一样的,并不等价。

而且多个method可以有相同的函数名,只要receiver不同,
func (p *Person)SetName(name string)
func (a *Animal)SetName(name string)
但是function却不能重名函数,哪怕参数不同(即不存在C++中的函数重载概念)。
func SetName(p *Person, name string)
func SetName(a *Animal, name string) //err: SetName redeclared

换个角度问的话就是:
当我定义了一个method的时候golang是怎么存储它的?
当我使用了选择子的时候p.SetName,golang是如何找到method的?

  • 写回答

1条回答 默认 最新

  • Junebao 2022-09-09 12:52
    关注

    类型有其对应的方法集,参考 https://go.dev/ref/spec#Method_sets

    评论 编辑记录

报告相同问题?

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程