2015-05-14 91 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)) 
}