答案是math/big包用于Golang中大整数运算,支持任意精度计算,适用于加密和高精度场景;通过new(big.Int).SetInt64、SetUint64或SetString初始化;算术运算需调用Add、Sub、Mul、Quo等方法;比较使用Cmp返回1、0、-1表示大于、等于、小于。

在Golang中处理大整数时,math/big 包是标准库提供的核心工具。它支持任意精度的整数运算,适用于超出 int64 范围的数值操作,比如加密算法、高精度计算等场景。
创建和初始化 big.Int
big.Int 类型位于 math/big 包中,不能直接用普通数字赋值,需要通过特定方法初始化。
常用初始化方式包括:
- new(big.Int).SetInt64(n):从 int64 初始化
- new(big.Int).SetUint64(n):从 uint64 初始化
- new(big.Int).SetString(s, base):从字符串按指定进制解析,成功返回 *big.Int,失败返回 nil
num := new(big.Int) num.SetInt64(12345)// 从十六进制字符串创建 hexNum, _ := new(big.Int).SetString("1a3f", 16)
// 安全创建大数 if bigNum, ok := new(big.Int).SetString("9223372036854775808", 10); ok != nil { // 使用 bigNum }
基本算术运算
big.Int 的所有运算都通过方法完成,不支持 +、-、*、/ 等操作符。注意:这些方法通常会修改接收者或参数对象,建议使用目标变量调用方法并传入源对象。
立即学习“go语言免费学习笔记(深入)”;
常见运算方法:
- Add(a, b):计算 a + b
- Sub(a, b):计算 a - b
- Mul(a, b):计算 a * b
- Quo(a, b):计算 a / b(整除)
- Mod(a, b):取模运算
a := big.NewInt(100) b := big.NewInt(30) sum := new(big.Int).Add(a, b) // 130 diff := new(big.Int).Sub(a, b) // 70 prod := new(big.Int).Mul(a, b) // 3000 quot := new(big.Int).Quo(a, b) // 3
比较与逻辑操作
使用 Cmp 方法进行两个 big.Int 的比较,返回值为 int:
- 1 表示大于
- 0 表示等于
- -1 表示小于
x := big.NewInt(50)
y := big.NewInt(30)
switch x.Cmp(y) {
case 1:
fmt.Println("x > y")
case 0:
fmt.Println("x == y")
case -1:
fmt.Println("x < y")
}还可以使用 Sign() 判断正负或是否为零:返回 1(正)、0(零)、-1(负)。
转换回普通类型
当需要将 big.Int 转为基本类型时,提供以下方法:
- Int64():转为 int64(溢出时结果未定义)
- Uint64():转为 uint64
- String():转为十进制字符串(最常用)
基本上就这些。math/big 的设计强调显式和安全,虽然写法略繁琐,但能可靠处理超大整数。关键点是习惯用方法代替操作符,并注意对象是否被修改。合理使用 SetString 和 String 方法,就能在大数场景中游刃有余。










