神秘型断言失败?

时间:2015-05-15 20:35:05

标签: reflection types go

在什么情况下可以编码:

        v, ok := value.(int64)
        if !ok  {
            panic("NOPE "+reflect.TypeOf(value).Kind().String())
        } else {
            fmt.Printf("VAL: %d\n",v)
        }

使用消息panic: NOPE int64生成恐慌?

这是一个错误还是我遗漏的数字类型有什么基本的东西?

1 个答案:

答案 0 :(得分:4)

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

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

T的kind是int64,但value 不是 int64。