我在以下链接的代码中定义了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())
}
类型断言表达式的结果m.(Sub)
为类型Sub
。接口Sub
有一个Name()
可以调用的方法。
m
to 的类型断言Sub
成功,因为in的m
值为a HumanStruct
并且该类型满足Sub
接口。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句