Функция rand.Read

Функция rand.Read заполняет переданный ей слайс байтов случайными значениями. Она принимает один параметр - слайс []byte. В качестве результата функция возвращает количество записанных байтов и ошибку, которая всегда равна nil. Функция использует глобальный генератор случайных чисел из пакета rand.

Синтаксис

gorand.Read(p []byte) (n int, err error)

Пример

Давайте заполним слайс из 5 байтов случайными значениями:

gopackage main

import (
  "fmt"
  "math/rand"
)

func main() {
  slice := make([]byte, 5)
  n, err := rand.Read(slice)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Printf("Read %d bytes: %v\n", n, slice)
}

Результат выполнения кода:

go"Read 5 bytes: [123 45 67 89 12]"

Пример

Давайте заполним слайс из 10 байтов и проверим количество записанных байтов:

gopackage main

import (
  "fmt"
  "math/rand"
)

func main() {
  buf := make([]byte, 10)
  n, err := rand.Read(buf)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println("Bytes read:", n)
  fmt.Printf("Data: %v\n", buf)
}

Результат выполнения кода:

go"Bytes read: 10"
"Data: [200 150 45 78 23 167 89 34 56 12]"

Пример

Давайте заполним слайс с использованием локального генератора rand.Rand:

gopackage main

import (
  "fmt"
  "math/rand"
  "time"
)

func main() {
  source := rand.NewSource(time.Now().UnixNano())
  rng := rand.New(source)
  data := make([]byte, 8)
  n, err := rng.Read(data)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Printf("Generated %d random bytes: %v\n", n, data)
}

Результат выполнения кода:

go"Generated 8 random bytes: [45 123 67 89 34 12 200 150]"

Смотрите также

  • функцию rand.Float64,
    которая возвращает случайное число с плавающей точкой
  • функцию rand.Int,
    которая возвращает случайное целое число
  • функцию rand.Intn,
    которая возвращает случайное число в заданном диапазоне
  • функцию rand.Seed,
    которая инициализирует генератор случайных чисел