我现在正在学习go。
我举个例子,我有这条线
rand.Seed(SEED)
Run Code Online (Sandbox Code Playgroud)
但是关于 go 的 vscode 扩展告诉我
rand.Seed 自 Go 1.20 起已被弃用,自 Go 1.0 起出现了替代方案:调用 Seed 并期望从全局随机源(使用 Int 等函数)获得特定结果序列的程序在依赖项更改时可能会被破坏它从全局随机源消耗了多少。为了避免此类损坏,需要特定结果序列的程序应使用 NewRand(NewSource(seed)) 来获取其他包无法访问的随机生成器。(SA1019)
NewRand(NewSource(seed))我无法理解如何按照建议使用。
我找到了关于 NewSource 的文档https://pkg.go.dev/math/rand#NewSource
但没有关于NewRand函数的文档
新推荐的等效项是什么rand.Seed(SEED)?
Cer*_*món 49
Go 1.20 种子文档有一个拼写错误。按照最新文档和Go 1.20 发行说明rand.New(rand.NewSource(seed))中所述使用。
创建随机源并使用源上的方法而不是调用包函数:
r := rand.New(rand.NewSource(seed))
fmt.Println(r.Uint64())
fmt.Println(r.Uint64())
Run Code Online (Sandbox Code Playgroud)
小智 7
下面是一个示例,演示如何在 Go 版本 1.20 或更高版本中生成 1 到 15 之间的随机数:
// Create a new random number generator with a custom seed (e.g., current time)
source := rand.NewSource(time.Now().UnixNano())
rng := rand.New(source)
// Generate a random number of minutes between 1 and 15
randomMinutes := rng.Intn(15) + 1
Run Code Online (Sandbox Code Playgroud)