我目前正在进行Go Lang教程,准确地说是“数字常量”。示例代码以以下语句开头:
const (
// Create a huge number by shifting a 1 bit left 100 places.
// In other words, the binary number that is 1 followed by 100 zeroes.
Big = 1 << 100
// Shift it right again 99 places, so we end up with 1<<1, or 2.
Small = Big >> 99
)
常量Big
显然是巨大的,我正在尝试打印它及其类型,如下所示:
fmt.Printf("%T", Big)
fmt.Println(Big)
但是,我对这两行都有以下错误:
#command-line-arguments ./compile26.go:19:constant 1267650600228229401496703205376 overflows int
我会尝试将Big转换为其他类型,例如uint64
,它会溢出相同的错误,或者只是将其转换为字符串,但在尝试Big.String()
时出现以下错误:
Big.String undefined(int类型没有字段或方法String)
它的类型似乎是int
,但我无法将其打印或投射到任何内容上,并且它会溢出所有方法。我该如何处理这个数字/对象以及如何打印它?
答案 0 :(得分:0)
该值大于任何64位数字类型可以容纳的值,因此您无法直接操作它。
如果需要编写只能使用math/big
包进行操作的数字常量,则需要将其序列化为包可以使用的格式。最简单的方法可能是使用10字符串:
https://play.golang.org/p/Mzwox3I2SL
bigNum := "1267650600228229401496703205376"
b, ok := big.NewInt(0).SetString(bigNum, 10)
fmt.Println(ok, b)
// true 1267650600228229401496703205376