神秘的类型断言失败?
Mysterious type assertion failure?
什么情况下会出现这段代码:
v, ok := value.(int64)
if !ok {
panic("NOPE "+reflect.TypeOf(value).Kind().String())
} else {
fmt.Printf("VAL: %d\n",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: %d\n", v)
}
生成消息:
panic: NOPE main.T
T的kind
是int64,但是value
是不是int64.
什么情况下会出现这段代码:
v, ok := value.(int64)
if !ok {
panic("NOPE "+reflect.TypeOf(value).Kind().String())
} else {
fmt.Printf("VAL: %d\n",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: %d\n", v)
}
生成消息:
panic: NOPE main.T
T的kind
是int64,但是value
是不是int64.