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,值=true2个参数,类型=Dog,值={小黄 3}3个参数,类型=*Dog,值=&{灰灰 3}4个参数,类型不确定,值=1.9

注意:item.(type) 返回item这个接口参数的实际类型。

results matching ""

    No results matching ""