2017-10-19 36 views
1

que je fais ce qui suit dans golang (hébergé sur Appengine)Pourquoi mon numéro aléatoire ne se met-il pas à jour?

Chaque fois que je lance l'application en exécutant la commande de dev_appserver et j'accéder à la page à localhost: 8080, je reçois une page avec un nouveau nombre aléatoire entre 1 et 19 Mais lors de l'actualisation de la page dans le navigateur, ce numéro ne change pas. Si je tue le serveur et redémarre en exécutant dev_appserver, je reçois un nouveau nombre aléatoire. Comment obtenir le numéro aléatoire à mettre à jour lors de l'actualisation de la page.

Code suit:

package PageTest

import (
    "fmt" 
    "net/http" 
    "math/rand" 
    "time" 
    "strconv" 
) 

func init() { 
    http.HandleFunc("/", handler) 
} 

func handler(w http.ResponseWriter, r *http.Request) { 
    fmt.Fprint(w, varHtml) 
} 
func random(min, max int) int { 
    rand.Seed(time.Now().Unix()) 
    return rand.Intn(max - min) + min 
} 

var myrand = strconv.Itoa(random(1, 19)) 
var varHtml = ` 

Random number is ` + myrand 

Répondre

7

Le varHtml est une variable de niveau de paquet et est calculé juste une fois.

Vous devez déplacer au gestionnaire comme:

func handler(w http.ResponseWriter, r *http.Request) { 
    var varHtml = `Random number is ` + strconv.Itoa(random(1, 19)) 
    fmt.Fprint(w, varHtml) 
} 

De plus il n'y a pas besoin de semences rands chaque fois.

Il est préférable de le faire au package init():

func init() { 
    rand.Seed(time.Now().Unix()) 
} 

func random(min, max int) int { 
    return rand.Intn(max - min) + min 
}