Avatar ·

如何在Go中正确初始化随机数生成器?

你好!我是Go新手,正在尝试理解随机数生成。我了解到Go中有`math/rand`包,但遇到一个问题:每次运行程序时,我都会得到相同的数字序列。 这是我的代码: ```go package main import ( "fmt" "math/rand" ) func main() { for i := 0; i < 5; i++ { fmt.Println(rand.Intn(100)) } } ``` 每次运行时输出总是相同的:`81, 87, 47, 59, 81`。我期望数字会变化。我听说需要某种方式“seed”(初始化)生成器,但不知道如何正确操作。 当我尝试使用`rand.Seed(time.Now().UnixNano())`时,linter警告说Seed在Go 1.20中已弃用。那么在Go的现代版本中,如何正确初始化生成器?`math/rand`和`crypto/rand`有什么区别?对于普通任务(非加密任务),哪种方法被认为是正确的? 感谢您提供详细的解释和示例。