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)
}
IO / # Читатель
Например, чтобы прочитать первые 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"} }
крипто / рандов / rand.go