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

时间:2016-03-26 02:42:23

标签: go

以下是go playground

的链接
package main

import "fmt"
import "math"
func main() {
    fmt.Println("Hello, playground")
    fmt.Println(math.MaxUint32)
}

以上代码似乎导致

constant 4294967295 overflows int

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

1 个答案:

答案 0 :(得分:6)

  

The Go Programming Language Specification

     

Constants

     

非类型化常量具有默认类型,该类型是   在类型值为的上下文中隐式转换常量   需要。无类型常量的默认类型是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))