为了账号安全,请及时绑定邮箱和手机立即绑定

神秘类型断言失败?

神秘类型断言失败?

Go
白板的微信 2021-10-04 18:14:50
这段代码在什么情况下可以:        v, ok := value.(int64)        if !ok  {            panic("NOPE "+reflect.TypeOf(value).Kind().String())        } else {            fmt.Printf("VAL: %d\n",v)        }用消息产生恐慌panic: NOPE int64?这是一个错误还是我缺少的数字类型有一些基本的东西?
查看完整描述

1 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

如果您在数字类型上使用类型声明,就会发生这种情况。如果你做这样的事情:


type T int64 


...


var value interface{} = T(1)

并将其放入您的代码中,您将得到完全相同的错误。但是如果你不检查种类,而是检查类型,你会看到这里发生了什么:


v, ok := value.(int64)

if !ok {

    panic("NOPE " + reflect.TypeOf(value).String())

} else {

    fmt.Printf("VAL: %d\n", v)

}

产生消息:


panic: NOPE main.T

该kind的T为Int64的,但是value是不是Int64的。


查看完整回答
反对 回复 2021-10-04
  • 1 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信