Генерация случайных чисел важна для многих задач. К ним относятся разработка игр, криптография и анализ данных. Случайные значения позволяют получить различные результаты с элементом изменчивости и непредсказуемости.
Go предоставляет два пакета для генерации случайных значений в стандартной библиотеке: математика/ранд и крипто/ранд. математика/ранд package в основном для математических операций. крипто/ранд package обрабатывает криптографически безопасные операции.
Ранд Пакеты
математика/ранд пакет предоставляет гибкий метод для генерация случайных чисел. Он реализует различные генерации псевдослучайных чисел. Пакет может генерировать случайное число с различными распределениями и использовать начальные числа для управления случайной последовательностью. Он также может генерировать случайные числа одновременно или параллельно.
крипто/ранд
Пакет реализует криптографически безопасный генератор случайных чисел. Он включает в себя функции для генерации случайных простых чисел с высокой вероятностью.Поскольку эти пакеты имеют одно и то же имя, вам нужно будет использовать псевдонимы, если вы хотите использовать оба в одной программе, например:
Импортировать (
кран "крипто/ранд"
Г-н и "математика / ранд"
)
Генерация случайных целых чисел в Go
Вы можете использовать математика/рандМеждународный функция для генерации случайных чисел в диапазоне.
Импортировать (
"ФМТ"
"математика / ранд"
"время"
)функцияосновной() {
ранд. Семя (время. Сейчас().UnixNano())// Intn генерирует случайное целое число от 0 до 100
// (не считая 100)
randomInt := рандом. Международный(100)
ФМТ. Println (случайное число)
}
Этот код передает текущее время в Семя функция. Он инициализирует генератор случайных чисел по умолчанию для псевдослучайности.
Международный Функция пакета rand генерирует случайное число в указанном диапазоне, в данном случае от 0 до 100.
Генерация случайных чисел с плавающей запятой
Вы можете генерировать случайные числа с плавающей запятой с помощью Поплавок32 и Поплавок64 функции. Они возвращают 32-битные и 64-битные числа с плавающей запятой соответственно.
Вот как вы можете генерировать случайные 64-битные числа с плавающей запятой в Go.
Импортировать (
"ФМТ"
"математика / ранд"
"время"
)функцияосновной() {
ранд. Семя (время. Сейчас().UnixNano())// генерируем случайный float64 между 0.0 и 1.0
randomFloat := ранд. Поплавок64()
ФМТ. Println (случайное число с плавающей запятой)
}
Процесс генерации 32-битных чисел с плавающей запятой аналогичен генерации случайных 64-битных чисел с плавающей запятой.
Генерация криптографически безопасных случайных чисел в Go
Вы можете использовать Интерн. функция крипто/ранд пакет для генерации криптографически безопасного случайного числа. Интерн. функция принимает экземпляр читателя и максимальное число для ограничения.
Импортировать (
"крипто/ранд"
"ФМТ"
"математика/большой"
)функцияосновной() {
// Создаем большой. Int с максимальным значением для желаемого диапазона
макс := большой. НовыйInt(100000000)
// Генерируем случайный большой. Интерн.
// Первый аргумент - это считыватель, возвращающий случайные числа
// Второй аргумент - максимальное значение (не включительно)
randInt, ошибка := ранд. инт (ранд. Читатель, макс)
если ошибся != ноль {
ФМТ. Распечатать("Ошибка генерации случайного числа:", ошибся)
возвращаться
}
ФМТ. Распечатать("Случайное число:", рандInt)
}
Макс переменная определяет максимальное значение для случайного числа, используя НовыйInt функция математика/большой упаковка. Интерн. функция возвращает случайное целое число и ошибку для обработки.
Генерация криптографически безопасных случайных значений
крипто/ранд пакет не предоставляет встроенных функций для создания криптографически безопасный случайные строки. Тем не менее, вы можете обойти это, используя Читать функция.
Импортировать (
"крипто/ранд"
"ФМТ"
)функциякриптослучайный(строкаЧарс нить, значениеДлина int32)нить {
байтСлайс := делать([]байт, значениеДлина)
_, эээ := ранд. Чтение (byteSlice)если ошибся != ноль {
возвращаться"Произошла ошибка чтения из байтового среза"
}для позиция, значение := диапазон bytesSlice {
рандомизировать := значение % байт(Лен(строкаЧарс))
bytesSlice[pos] = stringChars[рандомизация]
}возвращатьсянить(байтовый срез)
}
функцияосновной() {
ФМТ. Println (cryptoRandom(«Пневмонультрам» +
"микроскопический кремнийвулканокониоз", 10))
}
криптослучайный вышеприведенная функция принимает строку, из которой генерируется случайная строка. Он также принимает длину — 32-битное целое число — и возвращает строку.
в криптослучайный функция, bytesSlice переменная представляет собой срез необходимой длины строки. Цикл for-range проходит по срезу байтов, возвращает и извлекает модуль элементов среза и длину строки в байтах. Он обновляет индекс байтового среза индексом по модулю значения строки.
Наконец, криптослучайный Функция возвращает строковый формат байтового среза.
Вы можете генерировать UUID с помощью Go
Генерация случайных значений пригодится для широкого спектра вариантов использования. Если вам нужно много случайных уникальных значений, вы можете использовать UUID.
UUID (универсальные уникальные идентификаторы) обеспечивают глобальную уникальность идентификаторов. Вы можете использовать их, чтобы различать ресурсы в разных системах, избегая при этом конфликтов имен.
Существует множество пакетов, которые вы можете использовать для создания UUID в Go. Вы можете использовать пакет os для вызова uuid в вашей операционной системе, прибегните к пакету UUID от Google или используйте пакет gouuid для создания UUID.