You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang 1.19版本骰子随机数生成异常问题求助

问题解决:Go 1.19下rpgforge掷骰返回连续相同数字

问题描述

我数年前编写了一个用于模拟骰子投掷的rpgforge模块,可将“3d6”这类人类可读的掷骰规则转换为实际的多次掷骰逻辑,用来支持我的纸笔RPG爱好。该模块近4年未做改动,在Go 1.18(Ubuntu环境)下运行正常,但升级到Go 1.19(Win11环境)后,调用forge.ThrowDices("10d10")返回的结果却是连续相同的数字,而非预期的多样随机组合。

示例代码:

package main

import (
    "fmt"
    "math/rand"
    "time"

    forge "github.com/parasit/rpgforge"
)

func main() {
    rand.Seed(time.Now().UTC().UnixNano())
    for x := 0; x < 10; x++ {
        fmt.Println(forge.ThrowDices("10d10"))
    }
}

解决方案

经排查,问题根源在于rpgforge模块的掷骰逻辑中,每次执行掷骰操作时都会重新初始化随机数生成器。Go版本升级后,这种重复初始化的行为导致随机数序列始终从同一个起点生成,最终返回连续相同的结果。

解决步骤:

  • 移除模块内所有掷骰操作中的随机数初始化代码
  • 在调用该模块的程序入口处(如示例的main函数)手动执行一次随机数初始化(示例中已包含rand.Seed(time.Now().UTC().UnixNano()),保留即可;若使用Go 1.20及以上版本,可省略Seed调用,直接使用默认随机源)

内容的提问来源于stack exchange,提问作者parasit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:30:48