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

Susan Sarandon
Lepaskan: 2024-10-30 13:25:02
asal
542 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!