我在以下鏈接的代碼中定義了 2 個接口 {Main, Sub} 和一個結構 HumanStruct。我知道為什么 s1.(Main).Title() 有效。但我想知道為什么 m.(Sub).Name() 有效。這里'm'是接口Main類型的變量。此主界面沒有字段“Sub”。那么它是如何工作的呢?package mainimport "fmt"type Main interface { Title() string}type Sub interface { Main Name() string}type HumanStruct struct { name string title string}func (hs HumanStruct) Name() string { return hs.name}func (hs HumanStruct) Title() string { return hs.title}func main() { h := HumanStruct{name: "John", title: "Kings"} var m Main m = h var s1 Sub s1 = h fmt.Println("From main: ", m.(Sub).Name()) fmt.Println("From sub: ", s1.(Main).Title())}
1 回答

紅糖糍粑
TA貢獻1815條經驗 獲得超6個贊
類型斷言表達式的結果m.(Sub)
是 type Sub
。接口Sub
有一個Name()
可以調用的方法。
m
to的類型斷言Sub
成功是因為 in 的值m
是 aHumanStruct
并且該類型滿足Sub
接口。
- 1 回答
- 0 關注
- 169 瀏覽
添加回答
舉報
0/150
提交
取消