Golang生成隨機數案例實戰
作者:尹正傑
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
一.生成1個[0-99]的隨機數案例
package main import ( "fmt" "math/rand" "time" ) func main() { /* rand.Seed: 還函數是用來創建隨機數的種子,如果不執行該步驟創建的隨機數是一樣的,因為默認Go會使用一個固定常量值來作為隨機種子。 time.Now().UnixNano(): 當前操作系統時間的毫秒值 */ rand.Seed(time.Now().UnixNano()) /* 生成一個隨機數 */ a := rand.Intn(100) //實際隨機生成的數字范圍[0,99] fmt.Printf("a的類型為[%T],a的隨機數值為:[%d]\n", a, a) }
二.生成10個[200-500]的隨機數案例
package main import ( "fmt" "math/rand" "time" ) func main() { /* rand.Seed: 還函數是用來創建隨機數的種子,如果不執行該步驟創建的隨機數是一樣的,因為默認Go會使用一個固定常量值來作為隨機種子。 time.Now().UnixNano(): 當前操作系統時間的毫秒值 */ rand.Seed(time.Now().UnixNano()) /* 生成十個隨機數[200-500] */ for index := 1; index <= 10; index++ { random_number := rand.Intn(301) + 200 fmt.Printf("第[%d]個隨機數的值為:[%d]\n", index, random_number) } }
三.燒腦版生成隨機數[需要指針知識]
package main import ( "fmt" "math/rand" "time" ) func getRandomNumber(p *int, start_pos int, stop_pos int) { /* rand.Seed: 還函數是用來創建隨機數的種子,如果不執行該步驟創建的隨機數是一樣的,因為默認Go會使用一個固定常量值來作為隨機種子。 time.Now().UnixNano(): 當前操作系統時間的毫秒值 */ rand.Seed(time.Now().UnixNano()) random_number := rand.Intn(stop_pos-start_pos) + start_pos /* 將指針作為參數傳遞,形參間接修改實參的值 */ *p = random_number } func main() { /* 定義要生成隨機值的范圍 */ var ( start_pos int = 200 stop_pos int = 500 num int ) for index := 1; index <= 10; index++ { /* 每次循環時讓CPU休息1毫秒,因為CPU執行太快,可能10此循環幾乎在同一納秒執行完畢。 我暫時想到的解決方案有兩種: (1)以形參的方式傳入隨機種子值 (2)讓主線程在不同的時間段調用函數 上面兩種思路均可,我為了省事情就直接讓主線程休眠1毫秒,即采用了第二種解決方案。 */ time.Sleep(1) getRandomNumber(&num, start_pos, stop_pos) fmt.Printf("第[%d]個隨機數的值為:[%d]\n", index, num) } }