Erzeugung von Zufallszahlen in Gehen
Ich versuche zu generieren zufälliger zahlen (Integer) im Gehen, ohne Erfolg. Ich fand die rand
Paket in crypto/rand
, das scheint zu sein was ich will, aber ich kann nicht sagen, aus der Dokumentation, wie es zu benutzen. Dies ist, was ich versuche jetzt:
b := []byte{}
something, err := rand.Read(b)
fmt.Printf("something = %v\n", something)
fmt.Printf("err = %v\n", err)
Aber leider immer Ausgänge:
something = 0
err = <nil>
Gibt es eine Möglichkeit dieses Problem zu beheben, so dass es tatsächlich erzeugt Zufallszahlen? Alternativ, gibt es eine Möglichkeit, um die Obere Schranke für die Zufallszahlen generiert dies?
- Ich würde erwarten, dass die routine zum füllen des Arrays
b
mit zufälligen bytes, aber viele haben Sie gefragt. - Mich auch - ich bin gerade neu in Go und kenne mich nicht mit den Aufruf-Konventionen oder ähnliches.
- Es füllen werde
b
jedochb
ist eine leere Scheibe (und die backing-array hat die Größe 0). So rand.Read() keinen Platz für etwas zu speichern, und gibt 0 zurück in Ihresomething
variable, die angibt, nichts wurde gespeichert.b := make([]byte,4)
wäre angemessener gewesen, so dass der rand.Lesen Sie zum speichern von 4 Byte in b
Du musst angemeldet sein, um einen Kommentar abzugeben.
crypto/rand
stellt nur binären Strom von Zufallsdaten, aber Sie Lesen können, ganze zahlen von es mitencoding/binary
:Je nach Anwendungsfall, eine weitere option ist das
math/rand
Paket. Tun Sie das nicht wenn Sie generieren zahlen, die völlig unberechenbar. Es kann hilfreich sein, wenn Sie brauchen, um Ergebnisse zu erzielen, die reproduzierbar sind, aber-geben Sie einfach in der gleichen Samen, die Sie übergeben, in der ersten Zeit.Hier ist der Klassiker unter den "Samen der generator mit der aktuellen Zeit und erzeugen eine Reihe" - Programm:
1. april 2012, nach der Veröffentlichung der stabilen version des lang, können Sie Folgendes tun:
time.Now().Unix()
nicht ganz ausreichen, wieUnixNano()
tut.