猿问

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

我一直在研究涉及包的元编程,并且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 似乎没有进行正确的类型推断。


这是错误还是预期行为?如果期望,有谁知道为什么?


30秒到达战场
浏览 998回答 1
1回答

一只名叫tom的猫

math.MaxInt64是一个Untyped Constant。数字常量代表任意精度的值并且不会溢出。当您将此分配给变量时,它需要转换为数字类型,如果未指定,int则默认使用。由于intGo 中的类型代表您的体系结构的本机大小,因此这将在具有 32 位int的系统上溢出。
随时随地看视频慕课网APP

相关分类

Go
我要回答