package main
import "fmt"
import "math"
func main() {
fmt.Println("Hello, playground")
fmt.Println(math.MaxUint32)
}
以上代码似乎导致
constant 4294967295 overflows int
fmt.Println
会自动将每个数字转换为int吗?
答案 0 :(得分:6)
The Go Programming Language Specification
非类型化常量具有默认类型,该类型是 在类型值为的上下文中隐式转换常量 需要。无类型常量的默认类型是bool,rune,int, float64,complex128或字符串,取决于它是否 布尔值,符文,整数,浮点,复数或字符串常量。
func Println(a ...interface{}) (n int, err error)
fmt.Println(math.MaxUint32)
math.MaxUint32
是一个无类型的整型常量,默认情况下在此上下文中键入int
,类型为interface{}
参数的无类型整型常量参数。
int
是一个带符号的32位或64位整数,具体取决于实现。
const (
MaxInt32 = 1<<31 - 1
MaxUint32 = 1<<32 - 1
)
MaxUint32
大于MaxInt32
。
如果您运行go env
,您应该会看到您使用的是32位架构,例如GOARCH="386"
。
不接受默认的32位int
类型。使用兼容的类型转换。例如,写
fmt.Println(uint32(math.MaxUint32))