希曼日记

断言

语法 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("吃东西")  
}