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

用作接口的复合文字的地址

用作接口的复合文字的地址

Go
繁华开满天机 2021-10-25 20:07:57
当用作接口时,复合文字的地址被评估为文字本身。有人可以指出参考规范中处理此问题的部分吗?package mainimport "fmt"type ntfc interface {    rx() int}type cncrt struct {    x int}func (c cncrt) rx() int{    return c.x}func rtrnsNtfca() ntfc {    return &cncrt{3}}func rtrnsNtfc() ntfc {    return cncrt{3}}func rtrnsCncrt() *cncrt {    return &cncrt{3}}func main() {    fmt.Println(rtrnsNtfca().rx())    fmt.Println(rtrnsNtfc().rx())    fmt.Println(rtrnsCncrt().rx())}也在这里。对于将来的参考,是否可以只链接到操场而不在此处包含代码?
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

规格:方法集:


一个类型可能有一个与之关联的方法集。接口类型的方法集就是它的接口。任何其他类型的方法集T由所有声明为接收者类型的方法组成T。对应指针类型 *T的方法集是所有用receiver *Tor声明T的方法的集合(也就是包含了的方法集T)。


因此 的方法集*cncrt包括 的方法集cncrt。由于rx()是cncrt的方法集的元素,因此它也将是 in*cncrt的方法集。这意味着cncrt和*cncrt类型都实现了ntfc接口。


如果您有一个指针值 ( *cncrt) 并调用rx()它,则该指针将自动取消引用,该指针将成为该rx()方法的接收者。


在您的rtnsNtfca()和rtnsNtfc()函数中,ntfc将自动创建并返回一个接口值。Go 中的接口值表示为 (type;value) 对(更多详细信息:反射定律#接口的表示)。因此,无论rtnsNtfca()与rtnsNtfc()返回一个接口值,但第一个持有类型的动态值*cncrt和后者之一成立类型的动态值cncrt。


并且您的第三个方法rtrnsCncrt()返回一个具体类型 ( *cncrt),那里不涉及接口包装。


注意:“反过来”


规格: 调用:


Ifx是可寻址的并且&x的方法集包含m,x.m()是 的简写(&x).m()。


这意味着如果你声明rx()了一个指针接收器,并且你有一个类型的变量cncrt(注意:不是指针),rx()如果它是可寻址的,你仍然可以调用它的方法,并且地址将被自动获取并用作收件人。


查看完整回答
反对 回复 2021-10-25
  • 1 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

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