首页 > 解决方案 > 将零 int 断言为 int32

问题描述

我注意到 Go 断言不像我期望的那样对零 int 起作用。这是代码:

var i interface{}
i = 0
i32, ok := i.(int32)
fmt.Println(ok)
fmt.Println(i32)

输出如下:

false
0

我找不到这种行为的解释。它是一个错误吗?

标签: go

解决方案


i不包含int32,它包含int,因此类型断言失败。

将文字值直接分配给interface{}类似这样的值或在简短的变量声明中使用一个值可能会有点令人困惑,因为您并没有真正看到您得到的值类型;您需要了解常量“默认类型”的规则。如果这给您带来麻烦,您可以将其显式转换为一个类型,例如 i = int32(0),这将确保它i确实包含一个int32.


推荐阅读