断言
语法
variable : 变量
flag: 如果是T
,如何可以转为T
的类型,则返回true
,否则返回flase
element: interface变量
T: 断言的类型
variable, flag := element.(T)
实例:
package main
import "fmt"
// 定义人类的共有方法
type Person interface {
sayHi()
}
// 定义中国人
type Chinese struct {
name string
}
// 定义美国人
type An struct {
name string
}
func main() {
var ch Chinese = Chinese{"小米"} // 定义一个Chinese并赋值
var an An = An{"join"} // 定义一个An并赋值
greet(ch) // 运行各自的sayHi方法
greet(an) // 运行各自的sayHi方法
}
// 输出各国人的sayHi
func greet(p Person) {
p.sayHi()
ch, flag := p.(Chinese) // 断言, 如果是传入的Person类型是Chinese,那么flag返回true
if flag == true { // 如果是Chinese类型, 则运行它的私有方法
ch.eat()
}
}
// Chinese的sayHi
func (c Chinese) sayHi() {
fmt.Println(c.name)
}
// An的sayHi
func (a An) sayHi() {
fmt.Println(a.name)
}
// Chinese的私有方法
func (c Chinese) eat() {
fmt.Println("吃东西")
}