Pembuatan angka acak penting untuk banyak tugas. Ini termasuk pengembangan game, kriptografi, dan analisis data. Nilai acak memungkinkan hasil yang berbeda dengan elemen variabilitas dan ketidakpastian.
Go menyediakan dua paket untuk menghasilkan nilai acak di pustaka standar: matematika/rand Dan kripto/rand. Itu matematika/rand paket terutama untuk operasi matematika. Itu kripto/rand package menangani operasi yang aman secara kriptografis.
Paket rand
Itu matematika/rand package menyediakan metode yang fleksibel untuk menghasilkan angka acak. Ini mengimplementasikan berbagai generasi nomor pseudo-acak. Paket dapat menghasilkan nomor acak dengan distribusi berbeda, dan menggunakan seed untuk mengontrol urutan acak. Itu juga dapat menghasilkan angka acak secara bersamaan atau paralel.
Itu kripto/rand package mengimplementasikan generator nomor acak yang aman secara kriptografis. Ini termasuk fungsi untuk menghasilkan bilangan prima acak dengan probabilitas tinggi.
Karena paket ini memiliki nama yang sama, Anda harus menggunakan alias jika ingin menggunakan keduanya dalam satu program, misalnya:
impor (
cran "kripto/rand"
Tuan dan "matematika/rand"
)
Menghasilkan Bilangan Bulat Acak di Go
Anda dapat menggunakan matematika/randIntn berfungsi untuk membangkitkan bilangan acak dalam suatu range.
impor (
"fmt"
"matematika/rand"
"waktu"
)fungsiutama() {
rand. Benih (waktu. Sekarang().UnixNano())// Intn menghasilkan bilangan bulat acak antara 0 dan 100
// (tidak termasuk 100)
randomInt := rand. Intn(100)
fmt. Println (randomInt)
}
Kode ini melewati waktu saat ini ke Benih fungsi. Ini menginisialisasi generator nomor acak default untuk keacakan semu.
Itu Intn fungsi paket rand menghasilkan angka acak antara rentang yang ditentukan, dalam hal ini, 0 hingga 100.
Hasilkan Angka Floating-Point Acak
Anda dapat menghasilkan angka floating point acak dengan Mengapung32 Dan Mengapung64 fungsi. Mereka masing-masing mengembalikan angka floating point 32-bit dan 64-bit.
Inilah cara Anda dapat menghasilkan angka floating point 64-bit acak di Go.
impor (
"fmt"
"matematika/rand"
"waktu"
)fungsiutama() {
rand. Benih (waktu. Sekarang().UnixNano())// menghasilkan float64 acak antara 0,0 dan 1,0
acakFloat := rand. Mengapung64()
fmt. Println (acakFloat)
}
Proses pembangkitan bilangan floating point 32-bit sama dengan pembangkitan bilangan floating point 64-bit acak.
Menghasilkan Angka Acak yang Aman Secara Kriptografis di Go
Anda dapat menggunakan Int fungsi dari kripto/rand paket untuk menghasilkan nomor acak yang aman secara kriptografis. Itu Int fungsi mengambil contoh pembaca dan jumlah maksimum untuk batas.
impor (
"kripto/rand"
"fmt"
"matematika/besar"
)fungsiutama() {
// Buat yang besar. Int dengan nilai maksimum untuk rentang yang diinginkan
maks := besar. Int Baru(100000000)
// Menghasilkan besar acak. Int
// Argumen pertama adalah pembaca yang mengembalikan angka acak
// Argumen kedua adalah nilai maksimum (tidak termasuk)
randInt, err := rand. Int (rand. Pembaca, maks)
jika salah!= nol {
fmt. Cetak("Kesalahan menghasilkan nomor acak:", salah)
kembali
}
fmt. Cetak("Angka acak:", randInt)
}
Itu maks variabel mendefinisikan nilai maksimum untuk nomor acak menggunakan NewInt fungsi dari matematika/besar kemasan. Itu Int fungsi mengembalikan bilangan bulat acak dan kesalahan untuk penanganan.
Menghasilkan Nilai Acak yang Aman Secara Kriptografis
Itu kripto/rand paket tidak menyediakan fungsionalitas bawaan untuk menghasilkan aman secara kriptografis string acak. Tetap saja, Anda dapat menyiasatinya dengan menggunakan Membaca fungsi.
impor (
"kripto/rand"
"fmt"
)fungsicryptoRandom(stringChars rangkaian, nilaiPanjang int32)rangkaian {
bytesSlice := membuat([]byte, nilaiPanjang)
_, salah := rand. Baca (bytesSlice)jika salah!= nol {
kembali"Ada kesalahan membaca dari potongan byte"
}untuk pos, nilai := jangkauan bytesSlice {
mengacak := nilai % byte(len(stringChars))
bytesSlice[pos] = stringChars[acak]
}kembalirangkaian(byteSlice)
}
fungsiutama() {
fmt. Println (cryptoRandom("Pneumonoultram" +
"icroscopicsilicovolcanoconiosis", 10))
}
Itu cryptoRandom fungsi di atas mengambil string untuk menghasilkan string acak. Ini juga membutuhkan panjang—bilangan bulat 32-bit—dan mengembalikan sebuah string.
Dalam cryptoRandom fungsi, yang bytesSlice variabel adalah potongan dari panjang string yang dibutuhkan. Perulangan for-range melintasi irisan byte dan mengembalikan serta mengambil modulus elemen irisan dan panjang string dalam byte. Ini memperbarui indeks potongan byte dengan indeks nilai modulo dari string.
Akhirnya, cryptoRandom fungsi mengembalikan format string dari irisan byte.
Anda Dapat Menghasilkan UUID Dengan Go
Menghasilkan nilai acak sangat berguna untuk berbagai kasus penggunaan. Jika Anda memerlukan banyak nilai acak dan unik, Anda dapat menggunakan UUID.
UUID (Pengidentifikasi Unik Universal) memastikan keunikan global untuk pengidentifikasi. Anda dapat menggunakannya untuk membedakan antara sumber daya di seluruh sistem sambil menghindari konflik penamaan.
Ada banyak paket yang bisa Anda gunakan untuk membuat UUID di Go. Anda dapat menggunakan paket os untuk memanggil uuid perintah pada sistem operasi Anda, gunakan paket UUID Google, atau gunakan paket gouuid untuk menghasilkan UUID.