Go - math.MaxInt64和类型推断错误

时间:2015-03-27 20:47:19

标签: types go inference

我一直致力于涉及软件包的元编程,每当constant 9223372036854775807 overflows intmath.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没有做正确的类型推断。

这是一个错误还是预期的行为?如果期待,有谁知道为什么?

1 个答案:

答案 0 :(得分:7)

math.MaxInt64Untyped Constant。数字常量表示任意精度的值,不会溢出。将此值分配给变量时,需要将其转换为数字类型,如果未指定,则默认使用int

由于Go中的int类型表示架构的本机大小,因此在具有32位int s的系统上会溢出。