可以舉一個關於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