golang interface 和断言

golang 类型断言
类型断言是一个使用在接口值上的操作

有时候,我们可能需要知道某个接口类型的实际类型,比如某个方法需要接收多种类型的数据并需做分别处理时,我们可以把形参设为空接口类型以接收任意类型的值,但是我们怎么反向知道里面实际保存了的是哪个类型的对象呢? 
一种常用的方法是: 
• Comma-ok 断言

语法
value,ok := x.(T) 
x表示一个接口的类型,T表示一个类型(也可为接口类型)

该断言表达式会返回x的值和一个布尔值 可根据该布尔值判断x是否为T类型

如:

func main() {
    var x interface{}
    x = 10
    value, ok := x.(int)
    fmt.Print(value, ",", ok)
}
1
2
3
4
5
6
输出 
10,true 


配合switch使用
func main() {
    var a int
    a = 10
    judgeType(a)
}

func judgeType(a interface{}) {
    switch a.(type) {
    case int:
        fmt.Println("the type of a is int")
    case string:
        fmt.Println("the type of a is string")
    case float64:
        fmt.Println("the type of a is float")
    default:
        fmt.Println("unknown type")
    }
}

您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站大部分内容收集于互联网,如果有侵权内容、不妥之处,请联系删除。敬请谅解!

添加新评论

  关于博主【WANG-FEiHU】

Duplicate
-----------Complicate
--------------------------Appreciate
-----------------------------------------Fate

闻先后,术专攻
三人有师
习得文武艺,货与帝王家
人性不曾变,资本永无眠

-----------花有重开日,人无再少年-----------

  分类目录

  monitor(TD)

暗自伤心,不如立即行动。

再多一点努力,就多一点成功 的 可能

得意淡然,失意坦然;喜而不狂,忧而不伤。

海纳百川,有容乃大;壁立千仞,无欲则刚。

自古华山一条路,心不狠,站不稳

经历的越多才越明白,古人诚不欺我