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

为什么不能将* Struct分配给* Interface?

为什么不能将* Struct分配给* Interface?

Go
梵蒂冈之花 2021-05-14 18:31:27
我只是在Go导游中工作,我对指针和接口感到困惑。为什么此Go代码无法编译?package maintype Interface interface {}type Struct struct {}func main() {    var ps *Struct    var pi *Interface    pi = ps    _, _ = pi, ps}即如果Struct是一个Interface,为什么不*Struct成为一个*Interface?我收到的错误消息是:prog.go:10: cannot use ps (type *Struct) as type *Interface in assignment:        *Interface is pointer to interface, not interface
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

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

当您有一个实现接口的结构时,指向该结构的指针也会自动实现该接口。这就是为什么您永远都不会拥有*SomeInterface函数原型的原因,因为这不会为添加任何内容SomeInterface,并且您不需要在变量声明中使用这种类型(请参阅此相关问题)。

接口值不是具体结构的值(因为它的大小可变,所以不可能),但是它是一种指针(更精确地说,是指向结构的指针和指向类型的指针)。拉斯·考克斯(Russ Cox)正是在这里描述它:

接口值表示为两字对,它给出了指向有关接口中存储的类型的信息的指针以及指向相关数据的指针。

//img1.sycdn.imooc.com//60ab52f000010f3804850237.jpg

这就是为什么Interface,并且不是*Interface持有指向结构实现的指针的正确类型的原因Interface

所以你必须简单地使用

var pi Interface


查看完整回答
反对 回复 2021-05-24
  • 3 回答
  • 0 关注
  • 258 浏览
慕课专栏
更多

添加回答

举报

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