Comment la graine du générateur de nombres aléatoires

Je suis en train de générer une chaîne de caractères aléatoires dans le jeu de Go et voici le code que j'ai écrit jusqu'à présent:

package main

import (
    "bytes"
    "fmt"
    "math/rand"
    "time"
)

func main() {
    fmt.Println(randomString(10))
}

func randomString(l int) string {
    var result bytes.Buffer
    var temp string
    for i := 0; i < l; {
        if string(randInt(65, 90)) != temp {
            temp = string(randInt(65, 90))
            result.WriteString(temp)
            i++
        }
    }
    return result.String()
}

func randInt(min int, max int) int {
    rand.Seed(time.Now().UTC().UnixNano())
    return min + rand.Intn(max-min)
}

Mon application est très lente. Amorçage à l'aide de time apporte le même nombre aléatoire pour un certain temps, de sorte itération de la boucle, encore et encore. Comment puis-je améliorer mon code?

  • La "si la chaîne(randInt(65,90))!=temp {" il semble que vous essayez d'ajouter une sécurité supplémentaire mais bon, les choses deviennent même un après l'autre par hasard. En faisant cela, vous pouvez effectivement l'abaissement de l'entropie.
  • Comme une note de côté, il n'y a pas besoin de se convertir à l'UTC dans "le temps.Maintenant().(UTC).UnixNano()". Le temps Unix est calculé depuis l'Époque qui est UTC de toute façon.
  • Vous devez définir la graine une fois, une seule fois, et jamais plus d'une fois. ainsi, dans le cas où votre application s'exécute pendant des jours, vous pouvez l'installer une fois par jour.
  • Vous devriez graines une fois. Et je pense que le "Z" ne peut jamais apparaître, je suppose? Donc, je préfère utiliser les index de début inclusive et à la fin de l'index exclusif.
InformationsquelleAutor copperMan | 2012-09-07