我在以下链接的代码中定义了 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 关注
- 139 浏览
添加回答
举报
0/150
提交
取消