Could put a little example about the use of crypto/rand
[1]?
The function Read
has as parameter an array of bytes. Why? If it access to /dev/urandom to get the random data.
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
is a helper function that calls Reader.Read
. Reader
is defined as: var Reader io.Reader
.
crypto/rand/
io.Reader
is the interface that wraps the basic Read
method.
Read
reads up to len(p)
bytes into p
. It returns the number of bytes read (0 <= n <= len(p)
) and any error encountered. Even if Read
returns n < len(p)
, it may use all of p
as scratch space during the call. If some data is available but not len(p)
bytes, Read
conventionally returns what is available rather than block waiting for more.
At the end of the input stream, Read
returns 0, os.EOF
. Read
may return a non-zero number of bytes with a non-nil
err. In particular, a Read
that exhausts the input may return n > 0, os.EOF
.
type Reader interface {
Read(p []byte) (n int, err os.Error)
}
io/#Reader
For example, to read the first 16 random bytes,
package main
import (
"fmt"
"crypto/rand"
)
func main() {
b := make([]byte, 16)
n, err := rand.Read(b)
fmt.Println(n, err, b)
}
Using a package init()
function, crypto/rand
defaults to using /dev/urandom
.
// Easy implementation: read from /dev/urandom.
// This is sufficient on Linux, OS X, and FreeBSD.
func init() { Reader = &devReader{name: "/dev/urandom"} }
crypto/rand/rand.go