1.类型断言

(T)
x.(T)
v:=x.(T)
v,ok:=x.(T)
x
var i int=10
v:=i.(int) //错误 i不是接口类型
TTx
TxT
var x interface{}=7  //x的动态类型为int,值为7
i:=x.(int)           // i的类型为int,值为7

type I interface {m()}
var y I

s:=y.(String)      //非法: String 没有实现接口 I (missing method m)
r:=y.(io.Reader)   //y如果实现了接口io.Reader和I的情况下,  r的类型则为io.Reader

类型断言如果非法,运行时就会出现错误,为了避免这种错误,可以使用一下语法:

v,ok:=x.(T)
okokpanic
type switch
type switchxT
type
switch x.(typE){
  
 }
type switchcase clause case clause
xx interface{}
switch i := x.(typE) {
case nil:
  printString("x is nil") // i的类型是 x的类型 (interface{})
casE int:
  prinTint(i) // i的类型 int
case float64:
  printFloat64(i) // i的类型是 float64
case func(int) float64:
  printFunction(i) // i的类型是 func(int) float64
case bool,String:
  printString("type is bool or String") // i的类型是 x (interface{})
default:
  printString("don't kNow the type") // i的类型是 x的类型 (interface{})
}

也许你已经看到上面的例子中有一个case clause中的类型是nil,它用来匹配x为nil的interface{}的情况。

运行结果如下:

大佬总结

以上是大佬教程为你收集整理的goLang 类型断言 type assertion全部内容,希望文章能够帮你解决goLang 类型断言 type assertion所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。