Вы можете использовать big.NewInt()
для создания нового значения big.Int
, инициализированного значением int64
. Он возвращает вам указатель (*big.Int
). В качестве альтернативы вы можете просто использовать встроенную функцию new()
для выделения значения big.Int
, которое будет 0
, например: new(big.Int)
, или поскольку big.Int
является типом структуры, простым составной литерал также будет делать: &big.Int{}
.
Если у вас есть значение, вы можете использовать Int.SetString()
для анализа и установки числа, заданного как string
. Вы можете передать основание номера строки, и оно также возвращает вам значение bool
, указывающее, успешно ли выполнен синтаксический анализ.
Затем вы можете использовать Int.Add()
и Int.Sub()
для вычисления суммы и разности чисел 2 big.Int
. Обратите внимание, что Add()
и Sub()
записывают результат в получатель, чей метод вы вызываете, поэтому, если вам нужны неизменные числа (операнды), используйте другое значение big.Int
для вычисления и сохранения результата.
См. Этот пример:
numA := "340282366920938463463374607431768211456"
numB := "17014118346046923173168730371588410572"
ba, bb := big.NewInt(0), big.NewInt(0)
if _, ok := ba.SetString(numA, 10); !ok {
panic("invalid numA")
}
if _, ok := bb.SetString(numB, 10); !ok {
panic("invalid numB")
}
sum := big.NewInt(0).Add(ba, bb)
fmt.Println("a + b =", sum)
diff := big.NewInt(0).Sub(ba, bb)
fmt.Println("a - b =", diff)
Вывод (попробуйте на Go Playground ):
a + b = 357296485266985386636543337803356622028
a - b = 323268248574891540290205877060179800884