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,请注明来意。