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

千巷貓影
TA貢獻1829條經驗 獲得超7個贊
您不能同時擁有同名的字段和方法,當您嵌入X提供方法的命名時會發生這種情況X()。
如所寫。Struct{}.Interface是一個領域,而不是一個方法。沒有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 關注
- 148 瀏覽
添加回答
舉報
0/150
提交
取消