Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Adakah `rand.Intn()` dalam Go Menjana Nombor Yang Sama Setiap Kali?

Mengapa Adakah `rand.Intn()` dalam Go Menjana Nombor Yang Sama Setiap Kali?

Susan Sarandon
Susan Sarandonasal
2024-10-30 13:25:02521semak imbas

Why Does `rand.Intn()` in Go Generate the Same Number Every Time?

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!

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