我试图弄清楚 go 如何处理结构之间的类型转换。我读过的所有内容都告诉我,具有相同底层类型的类型被认为是兼容的,并且类型转换是隐式发生的。如果是这样,为什么下面的代码不起作用?Foo和都Bar实现了FooI接口,并且都添加了一个x字符串类型的属性。然而,当我将一个类型结构传递给需要类型Bar结构AcceptBarOrFoo的结构时Foo,我得到了一个类型不匹配的编译错误。
package main
import (
"play.ground/bar"
"play.ground/foo"
)
func main() {
AcceptBarOrFoo(bar.Bar{})
}
func AcceptBarOrFoo(foo.Foo) interface{} {
return nil
}
// -- iface/iface.go --
package iface
type FooI interface {
a() string
b(int) int
}
// -- foo/foo.go --
package foo
import (
"play.ground/iface"
)
type Foo struct {
iface.FooI
x string
}
// -- bar/bar.go --
package bar
import (
"play.ground/iface"
)
type Bar struct {
iface.FooI
x string
}
狐的传说
慕斯王
相关分类