Go端点处理器仅初始化执行,重复请求返回相同内容问题
问题分析与修复方案
核心问题
你在注册路由时直接调用了employeeSearchHandler(),导致这个函数在服务启动阶段就执行完毕,生成了固定的随机数和对应的Handler实例。后续所有请求都复用这个提前创建好的Handler,自然返回内容不会变化。
修复步骤
修改处理器函数,使其符合
http.HandlerFunc签名
将employeeSearchHandler改成每次请求触发时才执行逻辑的函数:func employeeSearchHandler(w http.ResponseWriter, r *http.Request) { employee := rand.IntN(1000) fmt.Println(employee) // 每次请求都生成新的模板Handler并处理响应 templ.Handler(employee_search.EmployeeResult(employee)).ServeHTTP(w, r) }更新路由注册方式
不再提前执行处理器函数,而是直接传递函数本身:router.Get("/employee_search", employeeSearchHandler)
额外优化(可选)
如果需要更随机的数值,建议在main函数初始化随机数种子,避免每次启动服务生成的随机序列相同:
import "math/rand" import "time" func main() { rand.Seed(time.Now().UnixNano()) router := chi.NewRouter() // ... 其他路由注册代码 http.ListenAndServe(":3000", router) }
内容的提问来源于stack exchange,提问作者Sebi
相关产品推荐
相关产品推荐

