将零int声明为int32

Yur*_*ruk -3 go

我注意到Go断言不起作用,因为我期望零整数。这是代码:

var i interface{}
i = 0
i32, ok := i.(int32)
fmt.Println(ok)
fmt.Println(i32)
Run Code Online (Sandbox Code Playgroud)

输出如下:

false
0
Run Code Online (Sandbox Code Playgroud)

我找不到这种行为的解释。是虫子吗?

hob*_*bbs 5

i不包含int32,它包含int,因此类型声明失败。

直接给interface{}这样的字面值赋值或在简短的变量声明中使用一个字面值可能会有些混乱,因为您并没有真正看到所获得的值的类型。您需要了解常量“默认类型”的规则。如果这样做给您带来麻烦,则可以将其显式转换为like之类的类型, i = int32(0)以确保i实际上包含一个int32