美文网首页
go value receiver, pointer recei

go value receiver, pointer recei

作者: cdz620 | 来源:发表于2020-03-04 09:38 被阅读0次

go 语言规范里定义的 method sets 规则

Values 可调用的方法(methods receivers) 备注
T (t T) funcXXX 为什么不能调用 (t *T) funcXXX,因为无法保证所有的Value 都可以获取到指针地址(addressable value)
*T (t T) funcXXX and (t *T) funcXXX go 自动转化(dereferenced) *T --> T, 所以可以调用

为什么有些值无法获取地址?
go spec: https://golang.org/ref/spec#Address_operators 说明了不能寻址的情况。

常见的不能寻址的情况:

&m["key"]
&afunc()
&t.method()

var x *int = nil
*x   // causes a run-time panic
&*x  // causes a run-time panic

// 如果用变量保存中间结果值,就可寻址
v := afunc()
&v

总结:本质原因语言特性所决定的,目前官方文档无较明确对该现象的定义;作为语言使用者,可以理解为go本身语言特性决定的问题,知道一些常见的反例,注意避开情况。

参考文档

相关文章

网友评论

      本文标题:go value receiver, pointer recei

      本文链接:https://www.haomeiwen.com/subject/vtnflhtx.html