看看這個(gè)片段:package maintype Interface interface { Interface()}type Struct struct { Interface}func main() { var i interface{} = Struct{} _ = i.(Interface)}structStruct有一個(gè)嵌入的成員實(shí)現(xiàn)接口Interface。當(dāng)我編譯這個(gè)片段時(shí),我得到一個(gè)錯(cuò)誤:panic: interface conversion: main.Struct is not main.Interface: missing method Interface這看起來很奇怪,因?yàn)?struct應(yīng)該從嵌入的接口Struct繼承方法。InterfaceInterface我想知道為什么會(huì)發(fā)生這個(gè)錯(cuò)誤?它是在 golang 中設(shè)計(jì)的還是只是 golang 編譯器的錯(cuò)誤?
1 回答

千巷貓影
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
您不能同時(shí)擁有同名的字段和方法,當(dāng)您嵌入X提供方法的命名時(shí)會(huì)發(fā)生這種情況X()。
如所寫。Struct{}.Interface是一個(gè)領(lǐng)域,而不是一個(gè)方法。沒有Struct.Interface(),只有Struct.Interface.Interface()。
重命名您的界面。例如,這很好用:
package main
type Foo interface {
Interface()
}
type Struct struct {
Foo
}
func main() {
var i interface{} = Struct{}
_ = i.(Foo)
}
- 1 回答
- 0 關(guān)注
- 156 瀏覽
添加回答
舉報(bào)
0/150
提交
取消