I am doing the following in Golang (hosted on Appengine)
Whenever I initiate the app by running dev_appserver command and I access the page at localhost:8080, I get a page with a new random number between 1 and 19. But on refreshing the page in the browser, this number does not change. If I kill the server and re-initiate by running dev_appserver, I get a new random number. How do I get the random number to update on page refresh.
Code follows:
package testpage
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
The varHtml
is a package level variable and is calculated just once.
You should move it to the handler as:
func handler(w http.ResponseWriter, r *http.Request) {
var varHtml = `Random number is ` + strconv.Itoa(random(1, 19))
fmt.Fprint(w, varHtml)
}
Also there is no need to seed rand every time.
It's better to do it at package init()
:
func init() {
rand.Seed(time.Now().Unix())
}
func random(min, max int) int {
return rand.Intn(max - min) + min
}