可以举一点使用crypto/rand
[1]的例子吗?
函数Read
具有作为参数的字节数组。为什么?如果它访问 / dev / urandom 以获取随机数据。
func Read(b []byte) (n int, err os.Error)
答案 0 :(得分:4)
func Read(b []byte) (n int, err os.Error)
Read
是一个调用Reader.Read
的辅助函数。 Reader
定义为:var Reader io.Reader
。
io.Reader
是包装基本Read
方法的接口。
Read
将len(p)
字节读取到p
。它返回读取的字节数(0 <= n <= len(p)
)和遇到的任何错误。即使Read
返回n < len(p)
,它也可能在调用期间使用所有p
作为临时空间。如果某些数据可用但不是len(p)
个字节,Read
通常会返回可用的内容,而不是阻止等待更多内容。
在输入流的末尾,Read
返回0, os.EOF
。 Read
可能会返回非零的字节数,而非nil
错误。特别地,耗尽输入的Read
可以返回n> 0, os.EOF
。
type Reader interface {
Read(p []byte) (n int, err os.Error)
}
例如,要读取前16个随机字节,
package main
import (
"fmt"
"crypto/rand"
)
func main() {
b := make([]byte, 16)
n, err := rand.Read(b)
fmt.Println(n, err, b)
}
使用套餐init()
功能,crypto/rand
默认使用/dev/urandom
。
// Easy implementation: read from /dev/urandom.
// This is sufficient on Linux, OS X, and FreeBSD.
func init() { Reader = &devReader{name: "/dev/urandom"} }