为什么打印出最大整数会导致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(“ Hello,操场”)
fmt.Println(math.MaxUint32)
}
code> pre>
上面的代码似乎会导致 p>
常量4294967295溢出int
code> pre>
fmt.Println code>是否将每个数字自动转换为int? p >
div>
The Go Programming Language Specification
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))