Go随机数总是返回168

时间:2015-05-14 22:04:33

标签: 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))
}

1 个答案:

答案 0 :(得分:10)

您必须指定种子才能获得不同的数字。它在documentation中列出:

  

顶级函数(如Float64和Int)使用默认共享   每次a产生一个确定的值序列的源   程序运行。使用Seed函数初始化默认Source   如果每次运行都需要不同的行为。

关于Seed

的一些参考
  

Seed使用提供的种子值初始化默认的Source to   一种确定性的状态。如果未调用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))
}