我注意到对于零整数,Go 断言并不像我预期的那样有效。这是代码:
var i interface{}
i = 0
i32, ok := i.(int32)
fmt.Println(ok)
fmt.Println(i32)
输出如下:
false
0
我找不到对此行为的解释。是错误吗?
最佳答案
i
不包含 int32
,它包含 int
,因此类型断言失败。
像这样将字面量值直接分配给 interface{}
或在简短的变量声明中使用一个字面量值可能会有点困惑,因为您无法真正看到获得的值类型;你需要知道 "default type" 的规则一个常数。如果这给您带来麻烦,您可以将其显式转换为一种类型,例如
i = int32(0)
,这将确保 i
实际上包含 int32
。
关于go - 将零 int 断言为 int32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58072244/