在 Go 语言中,断言(Assertion)是一种类型转换的方式,它用于将一个接口类型转换为其他类型。
类型断言
在 Go 语言中,类型断言是将一个接口类型转换为其他类型的方式。类型断言的语法如下:
value, ok := interfaceValue.(interfaceType)
其中,interfaceValue
表示接口值,interfaceType
表示接口类型,value
表示类型转换后的值,ok
表示类型转换是否成功。
之前实例如下
package main
import "fmt"
// 接口 interface
func main() {
c := Chinese{} //创建一个中国人实例
u := American{} //创建一个美国人实例
greet(c) //中国人打招呼
greet(u) //美国人打招呼
}
// 接收具备SayHello接口能力的变量
func greet(s SayHello) {
s.sayHello()
//ch, flag := s.(Chinese) //判断s是否可以转换成功
if ch, flag := s.(Chinese); flag {
ch.niuYangGe()
} else {
fmt.Println("美国人不会扭秧歌")
}
}
// 定义接口
type SayHello interface {
sayHello()
}
// 接口实现:定义一个结构体【中国人】
type Chinese struct {
}
// 中国人的具体实现
func (c Chinese) sayHello() {
fmt.Println("你好")
}
func (c Chinese) niuYangGe() {
fmt.Println("扭秧歌")
}
// 接口实现:定义一个结构体【美国人】
type American struct {
}
// 美国人的具体实现
func (u American) sayHello() {
fmt.Println("Hi")
}