Go - пример про crypto / rand - PullRequest
       17

Go - пример про crypto / rand

1 голос
/ 18 апреля 2010

Не могли бы вы привести небольшой пример использования crypto/rand [1]?

Функция Read имеет в качестве параметра массив байтов. Зачем? Если это доступ к / dev / urandom , чтобы получить случайные данные.

func Read(b []byte) (n int, err os.Error)

[1] http://golang.org/pkg/crypto/rand/

1 Ответ

4 голосов
/ 18 апреля 2010
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

...