【发布时间】:2020-05-07 21:41:35
【问题描述】:
来自新手 gopher 的问候!
我有以下多路复用路由器设置:
s.router.HandleFunc("/test", s.TestHandler())
s.TestHandler:
func (s *server) TestHandler() http.HandlerFunc {
rnd := rand.Intn(100)
response := struct {
RND int `json:"rnd"`
}{
rnd,
}
return func(w http.ResponseWriter, r *http.Request) {
s.respond(w, r, 200, response)
return
}
}
辅助方法 s.respond:
func (s *server) respond(w http.ResponseWriter, r *http.Request, code int, data interface{}) {
w.WriteHeader(code)
if data != nil {
json.NewEncoder(w).Encode(data)
}
}
问题是当我发出 GET /test 时,除非重新启动应用程序,否则我会看到相同的数字。
我确定我做错了什么,如果有人指出我的错,将不胜感激。
【问题讨论】:
-
正式地:因为你不生成一个“随机”数,所以你生成一个“伪随机”数。这一代数字是确定性的,只有数字的序列看起来(有点)随机。
-
@Volker - 这是真的,但在 OP 的问题中,这是因为他们的 handlerfunc 不包括对
rand.Intn的调用,它包括已经生成的号码。