可以举一个关于crypto/rand
[1]的使用的例子吗?Go - 关于crypto/rand的例子
函数Read
的参数是一个字节数组。为什么?如果它访问/dev/urandom来获得随机数据。
func Read(b []byte) (n int, err os.Error)
[1] http://golang.org/pkg/crypto/rand/
可以举一个关于crypto/rand
[1]的使用的例子吗?Go - 关于crypto/rand的例子
函数Read
的参数是一个字节数组。为什么?如果它访问/dev/urandom来获得随机数据。
func Read(b []byte) (n int, err os.Error)
[1] http://golang.org/pkg/crypto/rand/
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"} }
您可以访问到*的/ dev/urandom的*,因为它已被定义于'的init()',而不是'newReader'(使用*的/ dev /随机*),因为它是未导出的。 – user316368 2010-04-18 22:48:47
由于未导出newReader和devReader,因此始终使用/ dev/urandom。 – peterSO 2010-04-19 02:28:44