2015-05-14 43 views
4

对于Go,我是一个完整的noob。转到随机数总是返回168

我想做一个任意的函数,返回两个随机数加在一起。

我粘贴了下面的代码,但无法弄清楚为什么它总是返回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)) 
} 
+3

这是什么问题? 168对我来说似乎是一个非常随机的数字。 – Gabe

回答

10

你必须指定种子来获得不同的数字。它是在documentation概述:

顶层的功能,如Float64和Int,使用默认共享 源产生值的确定性序列每一个 程序运行时间。如果每次运行都需要不同的行为,请使用种子功能初始化默认的源代码 。

而关于Seed

种子一些参考使用所提供的种子值的缺省源初始化为 确定性状态。如果种子未被调用,则如果种子(1)种子,则生成器的行为为 。

而且你可以看到一个例子去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)) 
}