Go - 34 Go 类型断言
基本介绍
类型断言,由于接口是一般类型,不知道具体类型,如果要转成具体类型,就需要使用类型断言,具体如下:
var a interface{}
var b float64 = 1.22
a = b // 空接口可以接收任何类型
// 那如何把 a 变为 float64呢
x := a.(float64) // 类型断言
fmt.Printf("x 的类型=%T 值==%v", x, x) // x 的类型=float64 值==1.22
对上面代码的说明:
在进行类型断言时,如果类型不匹配,就会报panic,因此进行类型断言时,要确保原来的空接口指向的就是断言类型;
如何在进行断言时,带上检测机制,如果成功就ok,否则也不要报panic;
// 类型断言(带检测的) --> 推荐使用
x, ok := a.(float32)
if ok {
fmt.Println("convert success ..")
fmt.Printf("x 的类型=%T 值=~~%v \n", x, x)
}else {
fmt.Println("convert fail")
}
fmt.Println("继续执行~~~~")
断言的最佳实践(即在实际中应用)
实现在多态数组中对结构体独有方法的实现
定义一个函数对多个不确定类型的变量进行类型判断并且输出结果;