【发布时间】:2015-06-01 07:50:10
【问题描述】:
我一直在研究涉及包的元编程,每当出现math.MaxInt64 和math.MaxUint64 时,我都会遇到错误constant 9223372036854775807 overflows int。
我把它分为两种情况:
有效
var a int64 = math.MaxInt64
b := interface{}(int64(math.MaxInt64))
无效
a := math.MaxInt64
b := interface{}(math.MaxInt64)
https://play.golang.org/p/U1QDmFbV29
Go 似乎没有进行正确的类型推断。
这是一个错误还是预期的行为?如果期望,有人知道为什么吗?
【问题讨论】:
-
这可能是因为您在 32 位环境中运行 Go。在 64 位机器上,这两个表达式都可以。
-
不是这样的。我的操作系统和 Go 都是 64 位的。
-
你确定吗?
go env GOARCH输出什么? -
@TristanRice @JimB 至少操场有 32 位整数 -
GOARCH那里打印amd64p32AFAIK 表示整数是 32 位宽。 -
按预期在我的机器上工作 'Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014;根:xnu-2422.115.4~1/RELEASE_X86_64'