1.1.1. 一、什么是类型断言。
类型断言就是把接口类型的变量,转换成其他类型。语法如下:
接口变量.(目标类型)
1、类型断言。不带检测机制。转换错误就panic错。
var a interface{} //a是空接口类型
var b float32 = 3.4
a = b //空接口可以接收任何类型。
y := a.(float32) //把接口变量 a 转换成 float32 类型。如果转换不成功报 panic 错
fmt.Printf("y的类型是%T,值是%v",y,y) // y的类型是float32,值是3.4
说明:
1、
y := a.(float32)
就是类型断言,把接口 a 转换成float32类型得到结果 y。2、如果类型断言转换错误,会报 panic 错,程序结束运行。所以要带检测机制。
2、类型断言。带检测机制。
就是类型断言的时候,会返回一个是否成功的标志,接收这个变量即可。转换错误也不会panic 。
var a interface{} //a是空接口类型
var b float32 = 3.4
a = b //空接口可以接收任何类型。
y,flag := a.(int) //类型断言
if flag {
fmt.Println("转换成功。。。。")
fmt.Printf("y的类型是%T,值是%v",y,y)
}else {
fmt.Println("转换失败。。。。") // 转换失败。。。。
}
1.1.2. 二、使用断言判断参数的类型。
示例如下:
// 狗
type Dog struct {
Name string
Age int
}
// TypeJudege 判断传入的参数类型。变长参数。item.(type) 获取接口对应的实际类型的名字
func TypeJudege(items ...interface{}){
for index,item:= range items{
switch item.(type) {
case string:
fmt.Printf("第%v个参数,类型=string,值=%v \n",index,item)
case bool:
fmt.Printf("第%v个参数,类型=bool,值=%v \n",index,item)
case Dog:
fmt.Printf("第%v个参数,类型=Dog,值=%v \n",index,item)
case *Dog:
fmt.Printf("第%v个参数,类型=*Dog,值=%v \n",index,item)
default:
fmt.Printf("第%v个参数,类型不确定,值=%v \n",index,item)
}
}
}
func main() {
param1 := "你好"
param2 := true
param3 := Dog{"小黄",3}
param4 := &Dog{"灰灰",3}
param5 := 1.9
// 调用函数
TypeJudege(param1,param2,param3,param4,param5)
}
输出结果:
第0个参数,类型=string,值=你好
第1个参数,类型=bool,值=true
第2个参数,类型=Dog,值={小黄 3}
第3个参数,类型=*Dog,值=&{灰灰 3}
第4个参数,类型不确定,值=1.9
注意:
item.(type)
返回item这个接口参数的实际类型。