首页  >  文章  >  后端开发  >  ## Go中为什么值可以调用指针方法?

## Go中为什么值可以调用指针方法?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-25 23:58:28424浏览

## Why Can a Value Invoke a Pointer Method in Go?

Go 接收器方法调用语法:深入探究

在《Effective Go》指南中,指出指针方法只能是在指针上调用,而值方法可以在指针或值上调用。然而,最近的一次遇到提出了一个问题:为什么下面代码中的值会调用指针方法?

为了解决这个问题,我们转向 Go 语言规范。在“调用”下,它表示:

如果 x(的类型)的方法集包含 m 并且参数列表可以分配给 m 的参数列表,则方法调用 x.m() 是有效的。如果 x 是可寻址的并且 &x 的方法集包含 m,则 x.m() 是 (&x).m() 的简写。

在我们的例子中,vAge 是可寻址的(到 *age 的类型转换是有效的),所以vAge.Set(10) 本质上是 (&vAge).Set(10)。由于Set()的接收者类型是指针,这就是为什么值vAge可以调用指针方法Set()。

以上是## Go中为什么值可以调用指针方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn