3 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
包蘭特
import "math/rand"
功能讀取
func Read(p []byte) (n int, err error)
Read 從默認(rèn) Source 生成 len(p) 個(gè)隨機(jī)字節(jié)并將它們寫入 p。它總是返回 len(p) 和一個(gè) nil 錯(cuò)誤。
函數(shù)(*Rand) 讀取
func (r *Rand) Read(p []byte) (n int, err error)
Read 生成 len(p) 個(gè)隨機(jī)字節(jié)并將它們寫入 p。它總是返回 len(p) 和一個(gè) nil 錯(cuò)誤。
例如,
package main
import (
"math/rand"
"fmt"
)
func main() {
token := make([]byte, 4)
rand.Read(token)
fmt.Println(token)
}
輸出:
[187 163 35 30]

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊
Go 1.6 向math/rand包中添加了一個(gè)新函數(shù):
func Read(p []byte) (n int, err error)
它byte用隨機(jī)數(shù)據(jù)填充傳遞的切片。使用這個(gè)rand.Read():
token := make([]byte, 4)
if _, err := rand.Read(token); err != nil {
// Handle err
}
fmt.Println(token)
rand.Read()有 2 個(gè)返回值:“讀取”字節(jié)數(shù)和一個(gè)(可選)error。這是為了符合通用io.Reader接口,但文檔rand.Read()狀態(tài)(盡管有簽名)它永遠(yuǎn)不會(huì)實(shí)際返回非nil錯(cuò)誤,因此我們可以省略檢查它,這將其簡(jiǎn)化為:
token := make([]byte, 4)
rand.Read(token)
fmt.Println(token)
rand.Seed()在使用math/rand包之前不要忘記調(diào)用以正確初始化它,例如:
rand.Seed(time.Now().UnixNano())
注意:在 Go 1.6 之前沒(méi)有math/rand.Read()函數(shù),但是有(現(xiàn)在仍然是)一個(gè)crypto/rand.Read()函數(shù),但是這個(gè)crypto/rand包實(shí)現(xiàn)了一個(gè)加密安全的偽隨機(jī)數(shù)生成器,所以它比math/rand.

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
Go 1.6 向math/rand包中添加了一個(gè)新函數(shù):
func Read(p []byte) (n int, err error)
它byte用隨機(jī)數(shù)據(jù)填充傳遞的切片。使用這個(gè)rand.Read():
token := make([]byte, 4)
if _, err := rand.Read(token); err != nil {
// Handle err
}
fmt.Println(token)
rand.Read()有 2 個(gè)返回值:“讀取”字節(jié)數(shù)和一個(gè)(可選)error。這是為了符合通用io.Reader接口,但文檔rand.Read()狀態(tài)(盡管有簽名)它永遠(yuǎn)不會(huì)實(shí)際返回非nil錯(cuò)誤,因此我們可以省略檢查它,這將其簡(jiǎn)化為:
token := make([]byte, 4)
rand.Read(token)
fmt.Println(token)
rand.Seed()在使用math/rand包之前不要忘記調(diào)用以正確初始化它,例如:
rand.Seed(time.Now().UnixNano())
注意:在 Go 1.6 之前沒(méi)有math/rand.Read()函數(shù),但是有(現(xiàn)在仍然是)一個(gè)crypto/rand.Read()函數(shù),但是這個(gè)crypto/rand包實(shí)現(xiàn)了一個(gè)加密安全的偽隨機(jī)數(shù)生成器,所以它比math/rand.
- 3 回答
- 0 關(guān)注
- 571 瀏覽
添加回答
舉報(bào)