指针上定义的方法仍然可以用值调用

“ Effective Go”文档说以下内容。

有关接收器的指针与值的规则是,可以在指针和值上调用值方法,但是只能在指针上调用指针方法。

http://tip.golang.org/doc/effective_go.html#pointers_vs_values

这样,如果我定义如下的方法,就不能使用值来调用它吗?

func (self *someStruct) Change(newNum int) {
    self.propertyOne = newNum
}

但是,以下似乎仍然有效。

structInstance := &someStruct{
    propertyOne: 41,
}
(*structInstance).Change(456)

为什么?

是否将值转换(*structInstance)Change调用的地址/指针

如何确保某个类型的实例不能调用指针上定义的方法(如Change)?

前往游乐场示范

http://play.golang.org/p/azbpp_djlG

詹姆斯·亨斯特里奇

根据语言规范

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

在您的示例中,的方法集中没有Change方法(*structInstance),但是它是可寻址的,并且该方法存在于&(*structInstance)的方法集中,因此该调用被解释为(&(*structInstance)).Change(456)或更简单structInstance.Change(456)

防止此行为的唯一方法是还要在Change定义方法someStruct,也许会使它感到恐慌。不过,这并不理想,因为它只会在运行时告诉您有关问题的信息。构造您的程序将减少混乱,因此使用此速记实际上并不重要。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

函数调用后指针值仍然可用?

来自分类Dev

为什么可以用指针分配结构?

来自分类Dev

可以用单个指针将各种类型的值写入内存地址吗?

来自分类Dev

python类中的方法可以用子类定义的类型注释吗?

来自分类Dev

为什么在值而不是指针上定义方法?

来自分类Dev

我可以用Java调用Enums构造函数吗?

来自分类Dev

有没有一种好的方法可以用 HTML 或 javascript 向用户显示收集的数据并仍然保留数据?

来自分类Dev

我可以用ubuntu替换Windows并仍然获得相同的游戏体验吗?蒸汽与起源

来自分类Dev

Python:是否可以用MATLAB样式插值矩阵?

来自分类Dev

我可以用循环压缩这些值吗?

来自分类Dev

指向本地范围对象的指针如何仍然调用对象方法?

来自分类Dev

指向本地范围对象的指针如何仍然调用对象方法?

来自分类Dev

有没有一种方法可以用ZPL中的任意值覆盖解释行

来自分类Dev

有没有一种方法可以用ZPL中的任意值覆盖解释行

来自分类Dev

Angular2:我可以用箭头函数而不是方法处理@Output 返回值吗

来自分类Dev

我可以用什么方法将不同值的分数添加到我的代码中?

来自分类Dev

是否可以用代码动态填充Python方法?

来自分类Dev

有什么方法可以用python清除图像吗?

来自分类Dev

有什么方法可以用 CircleCI 指定 cpu 架构?

来自分类Dev

在我调用Delete之后,值仍然可以访问,C ++

来自分类Dev

C++ 如果指针指向 nullptr,我可以用数字替换它吗?

来自分类Dev

Golang-为什么我可以从值类型调用指针接收器方法?

来自分类Dev

加密...几乎可以用

来自分类Dev

为什么可以用未定义路径依赖的类型定义一个类?

来自分类Dev

有没有一种简单的方法可以用 Python3 用特定的十六进制值替换 XML 之类的标签?

来自分类Dev

是否有另一种方法可以用自定义消息替换 Exception 消息而不是 try{}catch(Exception e){} 方法?

来自分类Dev

python是否足够聪明,可以用恒定的结果替换函数调用?

来自分类Dev

有什么办法可以用我自己的softirq调用Linux内核

来自分类Dev

我可以用 sinon 监视外部模块函数中的函数调用吗?

Related 相关文章

  1. 1

    函数调用后指针值仍然可用?

  2. 2

    为什么可以用指针分配结构?

  3. 3

    可以用单个指针将各种类型的值写入内存地址吗?

  4. 4

    python类中的方法可以用子类定义的类型注释吗?

  5. 5

    为什么在值而不是指针上定义方法?

  6. 6

    我可以用Java调用Enums构造函数吗?

  7. 7

    有没有一种好的方法可以用 HTML 或 javascript 向用户显示收集的数据并仍然保留数据?

  8. 8

    我可以用ubuntu替换Windows并仍然获得相同的游戏体验吗?蒸汽与起源

  9. 9

    Python:是否可以用MATLAB样式插值矩阵?

  10. 10

    我可以用循环压缩这些值吗?

  11. 11

    指向本地范围对象的指针如何仍然调用对象方法?

  12. 12

    指向本地范围对象的指针如何仍然调用对象方法?

  13. 13

    有没有一种方法可以用ZPL中的任意值覆盖解释行

  14. 14

    有没有一种方法可以用ZPL中的任意值覆盖解释行

  15. 15

    Angular2:我可以用箭头函数而不是方法处理@Output 返回值吗

  16. 16

    我可以用什么方法将不同值的分数添加到我的代码中?

  17. 17

    是否可以用代码动态填充Python方法?

  18. 18

    有什么方法可以用python清除图像吗?

  19. 19

    有什么方法可以用 CircleCI 指定 cpu 架构?

  20. 20

    在我调用Delete之后,值仍然可以访问,C ++

  21. 21

    C++ 如果指针指向 nullptr,我可以用数字替换它吗?

  22. 22

    Golang-为什么我可以从值类型调用指针接收器方法?

  23. 23

    加密...几乎可以用

  24. 24

    为什么可以用未定义路径依赖的类型定义一个类?

  25. 25

    有没有一种简单的方法可以用 Python3 用特定的十六进制值替换 XML 之类的标签?

  26. 26

    是否有另一种方法可以用自定义消息替换 Exception 消息而不是 try{}catch(Exception e){} 方法?

  27. 27

    python是否足够聪明,可以用恒定的结果替换函数调用?

  28. 28

    有什么办法可以用我自己的softirq调用Linux内核

  29. 29

    我可以用 sinon 监视外部模块函数中的函数调用吗?

热门标签

归档