dta43039 2016-03-26 02:42
浏览 353
已采纳

为什么打印出最大整数会导致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?

  • 写回答

1条回答 默认 最新

  • dongpu5600 2016-03-26 02:56
    关注

    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))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 帮我调试idea基于spring boot项目
  • ¥15 es 7.17.20版本生成时间戳
  • ¥15 wpf dategrid表头排序图标自定义
  • ¥15 分析下图所示同步时序逻辑电路的逻辑功能。
  • ¥15 halcon联合c#遇到了问题不能解决
  • ¥15 xshell无法连接提示ssh服务器拒绝密码
  • ¥15 AT89C52单片机C语言关于串口通信的位操作
  • ¥20 需要步骤截图(标签-服务器|关键词-map)
  • ¥50 gki vendor hook
  • ¥15 灰狼算法和蚁群算法如何结合