解讀rand.Seed(time.Now().UnixNano())的作用及說明
rand.Seed(time.Now().UnixNano())作用
rand.Int
獲取隨機數(shù),不加隨機種子,每次遍歷獲取都是重復的一些隨機數(shù)據(jù)
rand.Seed(time.Now().UnixNano())
設置隨機數(shù)種子,加上這行代碼,可以保證每次隨機都是隨機的
golang rand seed 隨機數(shù)
rand.Seed(time.Now().UnixNano()) randInsert := rand.Intn(4) // [0, 4)
如果每次調(diào)rand.Intn()前都調(diào)了rand.Seed(x),每次的x相同的話,每次的rand.Intn()也是一樣的。
兩種解決方案
1. 只調(diào)一次rand.Seed():在全局初始化調(diào)用一次seed,每次調(diào)rand.Intn()前都不再調(diào)rand.Seed()。
2. 調(diào)多次rand.Seed(x),但每次x保證不一樣:每次使用納秒級別的種子。強烈不推薦這種,因為高并發(fā)的情況下納秒也可能重復。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Golang基于epoll實現(xiàn)最簡單網(wǎng)絡通信框架
這篇文章主要為大家詳細介紹了Golang如何基于epoll實現(xiàn)最簡單網(wǎng)絡通信框架,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習學習2023-06-06golang中的string與其他格式數(shù)據(jù)的轉換方法詳解
這篇文章主要介紹了golang中的string與其他格式數(shù)據(jù)的轉換方法,文章通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2023-10-10Golang使用CGO與Plugin技術運行加載C動態(tài)庫
這篇文章主要介紹了Golang使用CGO與Plugin技術運行加載C動態(tài)庫,Golang?程序在運行時加載C動態(tài)庫的技術,跳過了Golang項目編譯階段需要鏈接C動態(tài)庫的過程,提高了Golang項目開發(fā)部署的靈活性2022-07-07