Golang中rand.SetString的用法解析

Golang中rand.SetString的用法解析 rand 在以下代码中是如何计数的:

count, one := big.NewInt(0), big.NewInt(1)
count.SetString("100000000000000000000000", 10)
2 回复

我发现了

    const charset = "0123456789"

var seededRand *rand.Rand = rand.New( rand.NewSource(time.Now().UnixNano()))

func StringWithCharset(length int, charset string) string {

b := make([]byte, length) for i := range b { b[i] = charset[seededRand.Intn(len(charset))] } return string(b) }

func String(length int) string { return StringWithCharset(length, charset) }

count := big.NewInt(0)
count.SetString(String(77), 10)

更多关于Golang中rand.SetString的用法解析的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在这段代码中,rand 实际上并不存在,您使用的是 big.NewInt 创建的大整数对象 countSetString*big.Int 类型的方法,用于将字符串解析为大整数。

代码解析:

package main

import (
    "fmt"
    "math/big"
)

func main() {
    // 创建两个大整数,初始值为0和1
    count, one := big.NewInt(0), big.NewInt(1)
    
    // SetString将字符串解析为10进制大整数
    // 第一个参数:要解析的字符串
    // 第二个参数:进制(10表示十进制)
    // 返回值:解析成功的大整数对象和是否成功的布尔值
    success := count.SetString("100000000000000000000000", 10)
    
    if success {
        fmt.Printf("解析成功: %v\n", count)
        fmt.Printf("十进制值: %s\n", count.String())
        
        // 进行大整数运算示例
        sum := new(big.Int).Add(count, one)
        fmt.Printf("count + 1 = %s\n", sum.String())
    } else {
        fmt.Println("解析失败")
    }
}

输出结果:

解析成功: 100000000000000000000000
十进制值: 100000000000000000000000
count + 1 = 100000000000000000000001

关键点说明:

  1. SetString 方法直接修改接收者对象(count),而不是返回新对象
  2. 方法签名:func (z *Int) SetString(s string, base int) *Int
  3. 支持2-36进制,10表示十进制
  4. 字符串可以包含可选的正负号前缀
  5. 返回布尔值表示解析是否成功

错误用法示例:

// 错误:字符串包含非数字字符
count.SetString("123abc", 10) // 返回false

// 错误:进制超出范围
count.SetString("101", 37) // 返回false

// 正确:16进制解析
hexValue := big.NewInt(0)
hexValue.SetString("FF", 16) // 解析为255
回到顶部