英文:
Why does printing out max int cause compile error in golang?
问题
这是一个指向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 类型?
英文:
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?
答案1
得分: 7
《Go编程语言规范》
常量
无类型常量具有默认类型,该类型是在需要类型化值的上下文中将常量隐式转换为的类型。无类型常量的默认类型分别为bool、rune、int、float64、complex128或string,具体取决于它是布尔、符文、整数、浮点数、复数还是字符串常量。
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))
英文:
> 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))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论