2013-05-10 53 views
8

我尝试:如何使用fmt打印出Go中的常量uint64?

fmt.Printf( “%d”,math.MaxUint64)

但我得到以下错误消息:

恒定18446744073709551615溢出诠释

我该如何解决这个问题?谢谢!

+1

在我看来,你试图在一个变量类型为“int”中存储过大的数字。改用'uint64'。 – 2013-05-10 03:47:57

+0

我很抱歉,但是在写这个问题时我犯了一个错误。我更新了它以反映我的意思。 – abw333 2013-05-10 04:34:48

回答

20

math.MaxUint64是一个常量,而不是一个int64。尝试改为:

fmt.Printf("%d", uint64(num)) 

这里的问题是该常量是无类型的。常量将根据使用它的上下文而采用一种类型。在这种情况下,它被用作接口{},因此编译器无法知道要使用的具体类型。对于整数常量,它默认为int。由于你的常量溢出一个int,这是一个编译时错误。通过传递uint64(num),即表示您希望编译器将该值视为uint64

请注意,这个特定的常量只适用于uint64,有时也适用于uint。它甚至比标准的int64还要大。