我只是在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)正是在这里描述它:
接口值表示为两字对,它给出了指向有关接口中存储的类型的信息的指针以及指向相关数据的指针。
这就是为什么Interface
,并且不是*Interface
持有指向结构实现的指针的正确类型的原因Interface
。
所以你必须简单地使用
var pi Interface
- 3 回答
- 0 关注
- 258 浏览
添加回答
举报
0/150
提交
取消