我在以下链接的代码中定义了 2 个接口 {Main, Sub} 和一个结构 HumanStruct。我知道为什么 s1.(Main).Title() 有效。但我想知道为什么 m.(Sub).Name() 有效。这里'm'是接口Main类型的变量。此主界面没有字段“Sub”。那么它是如何工作的呢?
package main
import "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())
}
红糖糍粑
相关分类