簡體   English   中英

去 rand.Intn 相同的數字/值

[英]Go rand.Intn same number/value

誰能告訴我為什么這里有 Go 示例:

https://tour.golang.org/basics/1

總是為 rand.Intn(10) 返回相同的值?

2個原因:

  1. 你必須initalize全球Source的使用rand.Intn()和其他功能rand使用包rand.Seed() 例如:

     rand.Seed(time.Now().UnixNano())

    查看使用 Go Rand 包Difficulty 的可能重復項。
    引用rand包文檔:

    諸如 Float64 和 Int 之類的頂級函數使用默認的共享源,該在每次程序運行時生成確定性的值序列。 如果每次運行需要不同的行為,請使用 Seed 函數來初始化默認 Source。

  2. Tour在緩存其輸出的Go Playground上運行示例。
    請參閱為什么 count++(而不是 count = count + 1)會改變 Golang 中返回地圖的方式中的詳細信息

要使 rand 包中的函數正常工作,您必須設置一個“種子”值。 這必須是用戶決定的一個很好的隨機值,因為 - 根據https://golang.org/pkg/math/rand/#Rand.Seed這是 golang 用來首先將系統設置為確定性狀態的值然后根據該值生成一個數字。

要使示例代碼正常工作,您可以嘗試

func main() {
    rand.Seed(time.Now().UnixNano())
    fmt.Println("My favorite number is ", rand.Intn(10))
}

time.Now().UnixNano 可以給出任意(類似)的數字,因為該值以“千分之一秒”為單位

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM