Читаоци попут вас помажу у подршци МУО. Када обавите куповину користећи везе на нашем сајту, можда ћемо зарадити провизију за партнере. Опширније.

Генерисање случајних бројева је важно за многе задатке. То укључује развој игара, криптографију и анализу података. Случајне вредности омогућавају различите исходе са елементом варијабилности и непредвидивости.

Го пружа два пакета за генерисање насумичних вредности у стандардној библиотеци: математика/ранд и крипто/ранд. Тхе математика/ранд пакет је углавном за математичке операције. Тхе крипто/ранд пакет управља криптографски сигурним операцијама.

Тхе ранд Пацкагес

Тхе математика/ранд пакет пружа флексибилан метод за генерисање случајних бројева. Он имплементира различите генерације псеудо-случајних бројева. Пакет може да генерише насумични број са различитим дистрибуцијама и да користи семе за контролу насумичне секвенце. Такође може да генерише насумичне бројеве истовремено или паралелно.

Тхе крипто/ранд пакет имплементира криптографски сигуран генератор случајних бројева. Укључује функционалност за генерисање насумичних простих бројева са великом вероватноћом.

instagram viewer

Пошто ови пакети имају исто име, мораћете да користите псеудониме ако желите да користите оба у једном програму, на пример:

увоз (
цранд "крипто/ранд"
мранд "математика/ранд"
)

Генерисање случајних целих бројева у Го

Можете користити математике/рандовеИнтн функција за генерисање случајних бројева у опсегу.

увоз (
"фмт"
"математика/ранд"
"време"
)

фунцглавни() {
ранд. Семе (време. Сада().УникНано())

// Интн генерише насумични цео број између 0 и 100
// (не укључујући 100)
рандомИнт := ранд. Интн(100)

фмт. Принтлн (рандомИнт)
}

Овај код преноси тренутно време на Семе функција. Иницијализује подразумевани генератор случајних бројева за псеудо-случајност.

Тхе Интн функција пакета ранд генерише насумични број између одређеног опсега, у овом случају, од 0 до 100.

Генеришите насумичне бројеве са помичним зарезом

Можете генерисати насумичне бројеве са покретним зарезом помоћу Флоат32 и Флоат64 функције. Они враћају 32-битне и 64-битне бројеве са покретним зарезом.

Ево како можете да генеришете насумичне 64-битне бројеве са покретним зарезом у Го.

увоз (
"фмт"
"математика/ранд"
"време"
)

фунцглавни() {
ранд. Семе (време. Сада().УникНано())

// генерише насумично флоат64 између 0.0 и 1.0
рандомФлоат := ранд. Флоат64()

фмт. Принтлн (рандомФлоат)
}

Процес генерисања 32-битних бројева са покретним зарезом је исти као и генерисање насумичних 64-битних бројева са покретним зарезом.

Генерисање криптографски безбедних случајних бројева у Го

Можете користити Инт функција на крипто/ранд пакет за генерисање криптографски безбедног случајног броја. Тхе Инт функција узима инстанцу читача и максималан број за ограничење.

увоз (
"крипто/ранд"
"фмт"
"математика/велика"
)

фунцглавни() {
// Направите велики. Инт са максималном вредношћу за жељени опсег
мак := велики. НевИнт(100000000)

// Генериши насумично велики. Инт
// Први аргумент је читач који враћа насумичне бројеве
// Други аргумент је максимална вредност (не укључује)
рандИнт, ерр := ранд. Инт (ранд. Читач, макс)

ако ерр != нула {
фмт. Принтлн(„Грешка при генерисању случајног броја:“, грешка)
повратак
}

фмт. Принтлн(„Случајни број:“, рандИнт)
}

Тхе мак променљива дефинише максималну вредност за случајни број користећи НевИнт функција на математика/велика пакет. Тхе Инт функција враћа насумични цео број и грешку за руковање.

Генерисање криптографски безбедних насумичних вредности

Тхе крипто/ранд пакет не пружа уграђену функционалност за генерисање криптографски безбедни насумични низови. Ипак, ово можете да заобиђете користећи читати функција.

увоз (
"крипто/ранд"
"фмт"
)

фунццриптоРандом(стрингЦхарс низ, валуеЛенгтх инт32)низ {
битесСлице := направити([]бајт, валуеЛенгтх)
_, грешка := ранд. Прочитај (битесСлице)

ако ерр != нула {
повратак„Дошло је до грешке при читању са дела бајта“
}

за пос, вредност := домет битесСлице {
насумично := вредност % бајт(лен(стрингЦхарс))
битесСлице[пос] = стрингЦхарс[рандомизе]
}

повратакниз(битесСлице)
}

фунцглавни() {
фмт. Принтлн (цриптоРандом("Пнеумоноултрам" +
"икроскопска силиковулканокониоза", 10))
}

Тхе цриптоРандом функција изнад узима стринг да генерише насумични стринг из. Такође узима дужину — 32-битни цео број — и враћа стринг.

У цриптоРандом функција, тхе битесСлице променљива је исечак потребне дужине стринга. Петља фор-ранге пролази кроз исечак бајтова и враћа и преузима модул елемената пресека и дужину низа у бајтовима. Он ажурира индекс бајт пресека са индексом модуло вредности стринга.

Коначно, цриптоРандом функција враћа формат стринга бајтног дела.

Можете да генеришете УУИД-ове помоћу Го

Генерисање случајних вредности је корисно за широк спектар случајева употребе. Ако вам је потребно много насумичних, јединствених вредности, можете користити УУИД-ове.

УУИД-ови (универзално јединствени идентификатори) обезбеђују глобалну јединственост за идентификаторе. Можете их користити да бисте разликовали ресурсе у различитим системима, избегавајући сукобе имена.

Постоји много пакета које можете користити за генерисање УУИД-а у Го. Можете користити ос пакет да позовете ууид команду на вашем оперативном систему, прибегните Гоогле-овом УУИД пакету или користите пакет гоууид за генерисање УУИДс.