Golang类型断言

1、类型断言

x.(T) 检查x的动态类型是否是T,其中x必须是接口值。

直接使用

func main() {

        var x interface{}

        x = 100

        value1, ok := x.(int)

        if ok {

                //打印

                fmt.Println(value1)

        }

        value2, ok := x.(string)

        if ok {

                //未打印

                fmt.Println(value2)

        }

}

需要注意如果不接受第二个参数就是OK,这里失败的话则会直接panic,这里还存在一种情况就是x为nil同样会panic。

func main() {

 

        var x interface{}

        x = "Hello World"

        value := x.(int)

        fmt.Println(value)

}

panic: interface conversion: interface {} is string, not int

 

goroutine 1 [running]:

main.main()

E:/goProject/src/test_golang/main.go:185 +0x4c

exit status 2

若类型检查成功提取到的值也将拥有对应的type的方法:

 

func main() {

        var a interface{}

        a = A{}

        value := a.(A)

        value.Hi()

        fmt.Println(value.Name)

}

 

type A struct {

        Name string

}

 

func (a A) string() string {

        return "Type Is A"

}

func (a *A) Hi() {

        fmt.Println(a)

}

输出:&{}

 

func JudgeType(a interface{}) {

        switch value := a.(type) {

        case nil:

                fmt.Println("Type is nil")

        case int:

                fmt.Println("int", value)

        case string:

                fmt.Println("string:", value)

        case A:

                fmt.Println("类型A:", value)

        case *A:

                fmt.Println("指针A", value)

        default:

                fmt.Println("未匹配")

        }

}

 

type A struct {

}

 

func (a A) string() string {

        return "Type Is A"

}

func main() {

        n := 100

        JudgeType(n)

 

        str := "Hello World"

        JudgeType(str)

 

        a := A{}

        JudgeType(a)

 

        a1 := new(A)

        JudgeType(a1)

}

 

输出:

int 100

string: Hello World

类型A: {}

指针A &{}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值