Go随机数总是返回168

Bri*_*las 5 go

对于Go来说,我是一个完整的菜鸟.

我试图创建一个任意函数,返回两个加在一起的随机数.

我已粘贴下面的代码,无法弄清楚为什么它总是返回168!

package main

import(
    "fmt"
    "math/rand"
)

func add(x int, y int) int{
    return x + y
}

var a int = rand.Intn(100)
var b int = rand.Intn(100)

func main() {
    fmt.Println(add(a, b))
}
Run Code Online (Sandbox Code Playgroud)

Sal*_*ali 10

您必须指定种子才能获得不同的数字.它在文档中概述:

顶级函数(如Float64和Int)使用默认的共享源,每次运行程序时都会生成确定的值序列.如果每次运行需要不同的行为,请使用Seed函数初始化默认Source.

关于种子的一些参考

Seed使用提供的种子值将默认Source初始化为确定性状态.如果未调用Seed,则生成器的行为就像Seed(1)播种一样.

你可以在go cookbook中看到一个例子:

rand.Seed(time.Now().Unix())

如此结束,你会有这样的事情:

package main

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

func add(x int, y int) int{
    return x + y
}


func main() {
    rand.Seed(time.Now().Unix())
    var a int = rand.Intn(100)
    var b int = rand.Intn(100)
    fmt.Println(add(a, b))
}
Run Code Online (Sandbox Code Playgroud)