Memahami Penjanaan Nombor Rawak Seiras dalam rand Go.Intn()
Mengapakah rand.Intn() menjana nombor rawak yang sama? Soalan ini sering timbul untuk pemula yang menggunakan Go kerana kod berikut:
<code class="go">package main import ( "fmt" "math/rand" ) func main() { fmt.Println(rand.Intn(10)) }</code>
Walaupun dokumentasi yang mendakwa memberikan nombor rawak pseudo dalam julat [0, n), program mencetak nombor yang sama setiap masa.
Membenihkan Penjanaan Nombor Rawak
Kuncinya terletak pada pembenihan penjana nombor rawak dengan betul. Tingkah laku lalai adalah menggunakan benih deterministik, menghasilkan urutan nombor yang sama merentas pelaksanaan program. Untuk membetulkan ini:
<code class="go">rand.Seed(time.Now().UnixNano())</code>
Fungsi ini memulakan penjana nombor rawak dengan benih berdasarkan cap waktu Unix semasa. Ia memastikan urutan nombor yang berbeza untuk setiap larian.
Memahami Dokumentasi
Dokumentasi untuk rand.Intn() menyatakan: "Fungsi peringkat atas ... menghasilkan urutan nilai yang menentukan setiap kali program dijalankan." Oleh itu, tanpa pembenihan eksplisit, penjana bertindak seolah-olah disemai dengan 1, membawa kepada keputusan yang boleh diramal.
Kesimpulan
Dengan membeni penjana nombor rawak sebelum menggunakan rand.Intn (), anda boleh mengatasi isu pengulangan nombor rawak, memastikan penjanaan urutan bukan penentu yang betul.
Atas ialah kandungan terperinci Mengapa Adakah `rand.Intn()` dalam Go Menjana Nombor Yang Sama Setiap Kali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!