如何使用fmt在Go中打印出一个常量uint64?

31

我尝试了以下代码:

fmt.Printf("%d", math.MaxUint64)

但是我遇到了以下错误信息:

常量 18446744073709551615 溢出 int

我该如何解决?谢谢!

1个回答

56

math.MaxUint64是一个常量,不是int64类型。请改为尝试以下代码:

```go var x uint64 = math.MaxUint64 ```
fmt.Printf("%d", uint64(num))

问题在于这个常量没有类型。根据使用它的上下文,常量会假定一种类型。在这种情况下,它被用作interface{},因此编译器无法知道您想使用哪种具体类型。对于整数常量,默认为int。由于您的常量溢出了int,所以会出现编译时错误。通过传递uint64(num),您告诉编译器您希望将该值视为uint64

请注意,这个特定的常量只适合放在一个uint64和有时候是uint里面。该值甚至比标准的int64能够容纳的还要大。


1
uint64int64更大的方面是什么?我认为“更大”指的是位大小,这对于两种类型来说是相同的,因此都有64个后缀。也许您想引用值范围?但是两种类型的范围也是相同的,只是范围的起始值和结束值不同。 - TheDiveO
1
它不是最精确的语言,但“它”是常量,且常量的值比int64可以容纳的要“大”。我为了清晰起见编辑了这个句子。 - Stephen Weinberg
如何打印超过uint64范围的数字,假设我有一个常量Big = 1 << 100,我遇到了一个错误无法将Big(未命名的int常量1267650600228229401496703205376)转换为uint64类型 - GooDeeJAY
标准库中的math/big包含一个Int类型。您可以使用SetString方法设置任何您想要的数字。但是您无法将其定义为常量。 - Stephen Weinberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接