Go 如果函数中发生溢出,则uint64类型的溢出错误

Go 如果函数中发生溢出,则uint64类型的溢出错误,go,Go,为什么以下代码没有溢出错误 (如果函数中发生溢出,则uint64类型的溢出错误) 主程序包 func foo(i uint64)int{ 返回值(1根据以下公式: 班次计数没有上限 因此,您看到的行为是有意的 请注意,如果两个操作数都使用常量,则编译器将尝试用常量替换该语句,这可能会使定义的类型溢出: x := uint64(1) << 500 // ERROR: constant ... overflows uint64 x:=uint64(1)go说移位计数没有上限——为什么会

为什么以下代码没有溢出错误 (如果函数中发生溢出,则uint64类型的溢出错误)

主程序包
func foo(i uint64)int{
返回值(1根据以下公式:

班次计数没有上限

因此,您看到的行为是有意的

请注意,如果两个操作数都使用常量,则编译器将尝试用常量替换该语句,这可能会使定义的类型溢出:

x := uint64(1) << 500
// ERROR: constant ... overflows uint64

x:=uint64(1)go说移位计数没有上限
——为什么会出现错误?规范中的另一个相关引用:
对于有符号整数,操作+,-,*,/,这里有无符号整数,这里的“溢出错误”到底是什么意思?@dibbidabbi,看吧。有一个上限511@dibbidabbi如果您使用的是常量移位值,则编译器将尝试使用常量替换语句,其结果值可能会溢出您定义的类型。但是,您仍然可以使用
[0,maxUint64]中的任何值进行任意次数的移位
。听起来更好,谢谢。编译器应该更一致。
x := uint64(1) << 500
// ERROR: constant ... overflows uint64