我一直致力于涉及软件包的元编程,每当constant 9223372036854775807 overflows int
和math.MaxInt64
出现时,我就会遇到错误math.MaxUint64
。
我已将其分为两种情况:
有效
var a int64 = math.MaxInt64
b := interface{}(int64(math.MaxInt64))
无效
a := math.MaxInt64
b := interface{}(math.MaxInt64)
https://play.golang.org/p/U1QDmFbV29
似乎Go没有做正确的类型推断。
这是一个错误还是预期的行为?如果期待,有谁知道为什么?
答案 0 :(得分:7)
math.MaxInt64
是Untyped Constant
。数字常量表示任意精度的值,不会溢出。将此值分配给变量时,需要将其转换为数字类型,如果未指定,则默认使用int
。
由于Go中的int
类型表示架构的本机大小,因此在具有32位int
s的系统上会溢出。