golang 类型断言
类型断言是一个使用在接口值上的操作
有时候,我们可能需要知道某个接口类型的实际类型,比如某个方法需要接收多种类型的数据并需做分别处理时,我们可以把形参设为空接口类型以接收任意类型的值,但是我们怎么反向知道里面实际保存了的是哪个类型的对象呢?
一种常用的方法是:
• Comma-ok 断言
语法
value,ok := x.(T)
x表示一个接口的类型,T表示一个类型(也可为接口类型)
该断言表达式会返回x的值和一个布尔值 可根据该布尔值判断x是否为T类型
如:
func main() {
var x interface{}
x = 10
value, ok := x.(int)
fmt.Print(value, ",", ok)
}
输出
10,true
配合switch使用
func main() {
var a int
a = 10
judgeType(a)
}
func judgeType(a interface{}) {
switch a.(type) {
case int:
fmt.Println("the type of a is int")
case string:
fmt.Println("the type of a is string")
case float64:
fmt.Println("the type of a is float")
default:
fmt.Println("unknown type")
}
}
注意:在switch结构中使用了 switch a.(type)
,该element.(type)语法不能在 switch 外的任何逻辑里面使用