Это не будет работать, потому что под капотом, big.NewInt фактически выделяя в int64. Число, которое вы хотите выделить в большой.NewInt, потребуется больше, чем 64 бита, чтобы он существовал, поэтому он не удался.
Однако, если вы хотите добавить два больших числа ниже MaxInt64, вы можете это сделать! Даже если сумма больше MaxInt64. Вот пример, который я только что написал (http://play.golang.org/p/Jv52bMLP_B):
func main() {
count := big.NewInt(0);
count.Add(count, big.NewInt(5000000000000000000));
count.Add(count, big.NewInt(5000000000000000000));
//9223372036854775807 is the max value represented by int64: 2^63 - 1
fmt.Printf("count: %v\nmax int64: 9223372036854775807\n", count);
}
Какие результаты в:
count: 10000000000000000000
max int64: 9223372036854775807
Теперь, если вы все еще интересно, как NewInt работает под капотом, здесь есть функция вы используете, взяты из документации Go содержит ,:
// NewInt allocates and returns a new Int set to x.
func NewInt(x int64) *Int {
return new(Int).SetInt64(x)
}
Источники:
https://golang.org/pkg/math/big/#NewInt
https://golang.org/src/math/big/int.go?s=1058:1083#L51