序
本文主要研究一下golang的类型断言
类型断言
x.(T)
断言x不为nil且x为T类型
如果T不是接口类型,则该断言x为T类型
如果T类接口类型,则该断言x实现了T接口
实例1
func main() {
var x interface{} = 7
i := x.(int)
fmt.Println(reflect.TypeOf(i))
j := x.(int32)
fmt.Println(j)
}
直接赋值的方式,如果断言为true则返回该类型的值,如果断言为false则产生runtime panic;j这里赋值直接panic
输出
int
panic: interface conversion: interface {} is int, not int32
goroutine 1 [running]:
main.main()
type_assertion.go:12 +0xda
exit status 2
不过一般为了避免panic,通过使用ok的方式
func main() {
var x interface{} = 7
j, ok := x.(int32)
if ok {
fmt.Println(reflect.TypeOf(j))
} else {
fmt.Println("x not type of int32")
}