类型断言

  • 将接口的实现类赋值给接口时的处理方法

image.png

  1. var inter interface{}
  2. var ty1 TyTy = TyTy{}
  3. var ty2 TyTy
  4. inter = ty1
  5. ty2 = inter.(TyTy) // 类型推断 inter引用的对象如果可以转化位TyTy 则转化并返回
  6. y := inter.(float32) // 如果不可以 则报错
  7. fmt.Println(inter,ty2,y)

带检查的类型推导

  • 利用类型断言,如何避免报panic,使程序继续运行
    1. //待检测的类型断言
    2. if y,ok := inter.(float32);ok { //如果ok为true
    3. fmt.Println("convert success")
    4. fmt.Print("y的类型是 $T",y)
    5. }else{
    6. fmt.Println("convert fail")
    7. }
    8. fmt.Println("end")

switch + 类型断言

image.png

总结

  1. 类型断言的两种用法
  2. element是一般类型的接口,T是目标类型,valueT类型的变量,okbool类型
  3. value = element.(T) //将element转化为T,成功则返回并赋值给value,失败报错(panic)并终止程序
  4. value,ok = element.(T) //尝试将element转化为T 成功则给ok赋值为true,并将转化结果赋值给value
  5. 失败则给ok赋值为false,value不进行赋值,程序继续运行