规格说:类型的方法集决定了该类型实现的接口以及可以使用该类型的接收器调用的方法。所以,为了验证这一点,下面是代码:package mainimport "fmt"// I interftype I interface { hello() goodbye()}// T typetype T struct { name string}func (t T) hello() { fmt.Println("Hello", t.name)}func (t *T) goodbye() { fmt.Println("Goodbye", t.name)}func main() { var t1 T = T{"James"} t1.hello() t1.goodbye()}t1.goodbye()尽管goodbye()方法不是类型的方法集的一部分,T但仍然有效。因为,t1.goodbye()在内部工作,因为(&t1).goodbye()它满足以下规则:如果您有 aT并且它不可寻址,则只能调用接收器类型为 的方法T,而不是*T。但是,规范说,方法调用遵循以下规则:类型的方法集决定了该类型实现的接口以及可以使用该类型的接收器调用的方法。t1.goodbye()as (&t1).goodbye()break 方法调用规则的调用吗?
1 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
从规范中的调用...
如果 x 的(类型)的方法集包含 m 并且参数列表可以分配给 m 的参数列表,则方法调用 xm() 是有效的。如果 x 是可寻址的并且 &x 的方法集包含 m,则 xm() 是 (&x).m() 的简写
t1 是可寻址的。
&t1 的方法集包含 goodbye()。
t1.goodbye() 是 (&t1).goodbye() 的简写。
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报
0/150
提交
取消