【发布时间】:2018-01-20 23:54:24
【问题描述】:
我是新手 gopher,并试图了解指针接收器和接口。
type Foo interface {
foo()
}
type Bar struct {}
func (b *Bar) foo() {}
基于上述定义..
--- Allowed ---------
b := Bar{}
b.foo()
--- Not allowed -----
var foo Foo = Bar{}
获取编译器错误: 不能在赋值中使用 Bar 字面量(类型 Bar)作为 Foo 类型: Bar 没有实现 Foo(foo 方法有指针接收器)
我了解编译器在第一个场景中代表我们进行了一些指针转换和取消引用。为什么它在第二种情况下不做同样的事情?
【问题讨论】:
-
所以您不是在问如何让它工作,而是在问为什么它不起作用? (顺便说一句
var foo Foo = &Bar{}有效)
标签: go go-interface