为什么打印出最大整数会导致golang编译错误?

为什么打印出最大整数会导致golang编译错误?

问题描述:

Here is a link to go playground

package main

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

The above code seems to cause

constant 4294967295 overflows int

does fmt.Println convert every number to int automatically?

此处是去游乐场 p>

 包main 
 
import“ fmt” 
import“ math” 
func main(){
 fmt。  Println(“ H​​ello,操场”)
 fmt.Println(math.MaxUint32)
} 
  code>  pre> 
 
 

上面的代码似乎会导致 p>

 常量4294967295溢出int 
  code>  pre> 
 
 

fmt.Println code>是否将每个数字自动转换为int? p > div>

The Go Programming Language Specification

Constants

An untyped constant has a default type which is the type to which the constant is implicitly converted in contexts where a typed value is required. The default type of an untyped constant is bool, rune, int, float64, complex128 or string respectively, depending on whether it is a boolean, rune, integer, floating-point, complex, or string constant.

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

fmt.Println(math.MaxUint32)

math.MaxUint32 is an untyped integer constant that defaults to type int in this context, an untyped integer constant argument for a type interface{} parameter.

int is a signed 32- or 64-bit integer depending on the implementation.

const (
    MaxInt32  = 1<<31 - 1
    MaxUint32 = 1<<32 - 1
)

MaxUint32 is greater than MaxInt32.

if you run go env you should see that you are using a 32-bit architecture, for example, GOARCH="386".

Don't accept the default 32-bit int type. Use a compatible type conversion. For example, write

fmt.Println(uint32(math.MaxUint32))