为了账号安全,请及时绑定邮箱和手机立即绑定

接收器类型的方法集

接收器类型的方法集

Go
繁华开满天机 2022-07-11 15:46:24
规格说:类型的方法集决定了该类型实现的接口以及可以使用该类型的接收器调用的方法。所以,为了验证这一点,下面是代码: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() 的简写。


查看完整回答
反对 回复 2022-07-11
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信