go 类型断言
第一种写法
package main
import (
"fmt"
)
func main() {
var a interface{}
a = "你好golang"
v, ok := a.(string)
if ok {
fmt.Println("a就是一个string类型,值是:", v)
} else {
fmt.Println("断言失败")
}
}
输出:a就是一个string类型,值是: 你好golang
另一种写法:
package main
import (
"fmt"
)
// 1、X.(T) 括号里表示 X 可能是的类型
func MyPrint1(x interface{}) {
if _, ok := x.(string); ok {
fmt.Println("string类型")
} else if _, ok := x.(int); ok {
fmt.Println("int类型")
} else if _, ok := x.(bool); ok {
fmt.Println("bool类型")
}
}
// 2、类型.(type)只能结合 switch 语句使用
func MyPrint2(x interface{}) {
switch x.(type) {
case int:
fmt.Println("int类型")
case string:
fmt.Println("string类型")
case bool:
fmt.Println("bool类型")
default:
fmt.Println("传入错误...")
}
}
func main() {
MyPrint1("你好golang")
MyPrint1(true)
MyPrint1(20)
MyPrint2(true)
MyPrint2(20)
MyPrint2("你好golang")
}
输出:
string类型
bool类型
int类型
bool类型
int类型
string类型
除了基本的类型,还可以判断是不是某个
结构体