Rumah >pembangunan bahagian belakang >Golang >Mengapakah `rand.Intn` Go Kadangkala Menjana Nilai Yang Sama?

Mengapakah `rand.Intn` Go Kadangkala Menjana Nilai Yang Sama?

Susan Sarandon
Susan Sarandonasal
2024-12-16 08:20:16303semak imbas

Why Does Go's `rand.Intn` Sometimes Generate the Same Value?

Menyelesaikan masalah rand.Intn Menjana Nilai Yang Sama

Contoh Go yang disediakan dalam pautan sememangnya mengembalikan nilai yang sama untuk rand.Intn(10) melainkan diubah suai untuk memulakan penjana nombor rawak. Berikut ialah penjelasan:

  1. Sumber Nombor Rawak Tidak Dimulakan:

    • rand.Intn dan fungsi lain dalam pakej rand menggunakan Sumber global untuk menjana nombor rawak.
    • Secara lalai, Sumber ini tidak dimulakan, membawa kepada deterministik turutan.
    • Untuk memulakan Sumber, gunakan rand.Seed(time.Now().UnixNano()).
  2. Go Playground Caching :

    • The Go Playground, di mana contoh dijalankan, sering menyimpan hasil carian untuk diperbaiki prestasi.
    • Caching ini boleh menjejaskan output penjanaan nombor rawak, menjadikannya kelihatan deterministik.

Untuk menyelesaikan isu ini dan mendapatkan nombor rawak secara konsisten, pertimbangkan langkah berikut:

  1. Mulakan penjana nombor rawak menggunakan rand.Seed(time.Now().UnixNano()).
  2. Jika menjalankan contoh di Go Playground, kosongkan output sebelum dijalankan untuk mengelakkan caching.

Dengan mengikuti langkah ini, anda boleh menjana nombor rawak menggunakan rand.Intn dengan berkesan dan mengelakkan daripada menerima nilai yang sama berulang kali.

Atas ialah kandungan terperinci Mengapakah `rand.Intn` Go Kadangkala Menjana Nilai Yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn