这是一个去游乐场的链接
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吗?
无类型常量具有默认类型,该类型是在需要键入值的上下文中隐式转换常量的类型.无类型常量的默认类型分别是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)