Генерация случайных чисел является общим требованием во многих задачах программирования, включая моделирование, игры и криптографию. В Go доступно несколько методов генерации случайных чисел. В этой статье мы рассмотрим различные подходы к генерации случайных чисел и приведем примеры кода для каждого метода.
Метод 1: использование пакета math/rand
Стандартная библиотека Go предоставляет пакет math/rand, который предлагает простой и эффективный способ генерации псевдослучайных чисел. Псевдослучайные числа генерируются с помощью алгоритма, и хотя они кажутся случайными, на самом деле они детерминированы. Вот пример генерации случайного целого числа с помощью пакета math/rand:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
randomNumber := rand.Intn(100)
fmt.Println(randomNumber)
}
Метод 2. Генерация криптографически безопасных случайных чисел
Если вам нужны случайные числа для криптографических целей, например для генерации ключей шифрования или безопасных токенов, вам следует использовать пакет crypto/rand. Пакет crypto/rand обеспечивает более безопасный способ генерации случайных чисел с использованием источника энтропии операционной системы. Вот пример генерации криптографически безопасного случайного числа:
package main
import (
"crypto/rand"
"fmt"
"math/big"
)
func main() {
randomNumber, _ := rand.Int(rand.Reader, big.NewInt(100))
fmt.Println(randomNumber)
}
Метод 3: перетасовка элементов в срезе.
Другой распространенный вариант использования — перетасовка элементов внутри среза. Для этой цели часто используется алгоритм перемешивания Фишера-Йейтса. Вот пример перетасовки фрагмента целых чисел:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
numbers := []int{1, 2, 3, 4, 5}
rand.Shuffle(len(numbers), func(i, j int) {
numbers[i], numbers[j] = numbers[j], numbers[i]
})
fmt.Println(numbers)
}
В этой статье мы рассмотрели различные методы генерации случайных чисел в Go. Мы обсудили использование пакета math/rand для псевдослучайных чисел, пакета crypto/rand для криптографически безопасных случайных чисел и перетасовку элементов внутри среза. В зависимости от ваших конкретных требований вы можете выбрать подходящий метод генерации случайных чисел в ваших программах Go.