在什么情况下这段代码可以:
v, ok := value.(int64)
if !ok {
panic("NOPE "+reflect.TypeOf(value).Kind().String())
} else {
fmt.Printf("VAL: %dn",v)
}
用消息panic: NOPE int64
引起恐慌?
这是一个错误还是有一些基本的数字类型,我错过了?
如果在数字类型上使用类型声明,就可能发生这种情况。如果你这样做:
type T int64
...
var value interface{} = T(1)
放到你的代码中,你会得到完全相同的错误。但是如果你不检查类型,只检查类型,你会看到这里发生了什么:
v, ok := value.(int64)
if !ok {
panic("NOPE " + reflect.TypeOf(value).String())
} else {
fmt.Printf("VAL: %dn", v)
}
产生消息:
panic: NOPE main.T
T的kind
是int64,但value
是而不是 int64。