为什么打印出max int导致golang中的编译错误?

Kev*_*vin 4 go

这是一个去游乐场的链接

package main

import "fmt"
import "math"
func main() {
    fmt.Println("Hello, playground")
    fmt.Println(math.MaxUint32)
}
Run Code Online (Sandbox Code Playgroud)

上面的代码似乎导致了

constant 4294967295 overflows int
Run Code Online (Sandbox Code Playgroud)

fmt.Println自动将每个数字转换为int吗?

pet*_*rSO 6

Go编程语言规范

常量

无类型常量具有默认类型,该类型是在需要键入值的上下文中隐式转换常量的类型.无类型常量的默认类型分别是bool,rune,int,float64,complex128或string,具体取决于它是布尔值,符文,整数,浮点数,复数还是字符串常量.

func Println(a ...interface{}) (n int, err error)

fmt.Println(math.MaxUint32)
Run Code Online (Sandbox Code Playgroud)

math.MaxUint32是一个无类型的整型常量,默认int在此上下文中键入,是类型参数的无类型整数常量interface{}参数.

int 是一个带符号的32位或64位整数,具体取决于实现.

const (
    MaxInt32  = 1<<31 - 1
    MaxUint32 = 1<<32 - 1
)
Run Code Online (Sandbox Code Playgroud)

MaxUint32大于MaxInt32.

如果你运行,go env你应该看到你正在使用32位架构,例如GOARCH="386".

不接受默认的32位int类型.使用兼容的类型转换.例如,写

fmt.Println(uint32(math.MaxUint32))
Run Code Online (Sandbox Code Playgroud)