Go 我应该如何更改解析方法或更正随机方法

Go 我应该如何更改解析方法或更正随机方法,go,random,Go,Random,我想生成一个随机的17位数字字符串,并由golang解析为uint64,以下是我的代码: const msgMaxValue = 100000000000000000 s := fmt.Sprintf("%17v", rand.New(rand.NewSource(time.Now().UnixNano())).Int63n(msgMaxValue)) log.Info("s:", s) msgId, err := strconv.Atoi(s)

我想生成一个随机的17位数字字符串,并由golang解析为uint64,以下是我的代码:

const msgMaxValue      = 100000000000000000
s := fmt.Sprintf("%17v", rand.New(rand.NewSource(time.Now().UnixNano())).Int63n(msgMaxValue))
log.Info("s:", s)
msgId, err := strconv.Atoi(s)
错误是:无效语法,我发现随机值中有一个空格,但不知道为什么,我应该如何修复它,谢谢你用“crypto/rand”修复了它,下面是代码:

func CreateRandomNumber(len int) (string, error) {
    var numbers = []byte{1, 2, 3, 4, 5, 7, 8, 9}
    var container string
    length := bytes.NewReader(numbers).Len()

    for i := 0; i < len; i++ {
        random, err := rand.Int(rand.Reader, big.NewInt(int64(length)))
        if err != nil {
            log.Error("random error:", err)
            return "", err
        }
        container += fmt.Sprintf("%d", numbers[random.Int64()])
    }
    return container, nil
}
func CreateRandomNumber(len int)(字符串,错误){
var numbers=[]字节{1,2,3,4,5,7,8,9}
变量容器字符串
长度:=字节。NewReader(数字)。Len()
对于i:=0;i

然后
strconv.Atoi
获取一个int类型的数字是可以的

给定
strconv.Atoi
返回一个
int
-即使您正确地生成了一个17位长的字符串
s
-它仍然不适合
int
类型。您正在解决的原始问题是什么?是的,很抱歉我的问题出错,我已再次编辑了它,我想将字符串解析为uint64,但它不起作用。我已使用“crypto/rand”修复了它,只需生成
msgId,err:=strconv.Atoi(strings.ReplaceAll(s),,”)
。这里有一个空格,因为它还生成16位数字,格式打印17个字母,所以开头有时会有空格,但您可以删除它,然后正确解析。在[1..9]中选择一个随机数字并将其放入字符串中。然后在[0..9]中再选择16位数字,并将它们添加到字符串的末尾。你不需要一个前导零。