我有一个去休息 API 应用程序。我把它多克化了,并把它部署到了库伯内特斯。它正在我的本地工作。但是在 Kubernetes 中,应用程序会自行关闭,并且 Pod 会重新启动。它不会打印任何内容、任何日志或任何故障。import ( " github.com/gorilla/mux""net/http""log") func main() { controller := controllers.Controllers{} router := mux.NewRouter() router.HandleFunc("/customer", controller.GetCustomer()).Methods("GET") router.HandleFunc("/customer", controller.InsertCustomer()).Methods("POST") router.HandleFunc("/healthcheck", controller.HealthCheck()) addr := ":" + os.Getenv("PORT") srv := &http.Server{Addr: addr, Handler: router} go func() { if err := srv.ListenAndServe(); err != nil { log.Fatalf("listenAndServe failed: %v", err) } }() println("reached here")}令人惊讶的是,当我查看日志时,它会打印“到达这里”行。我检查了变量,它也是正确的。我怀疑这个电话失败了,但我找不到一个合理的答案。envlistenAndServe
1 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
函数结束时,你的应用也会结束。它不会等待其他非主戈鲁丁完成。请参阅规范:程序执行:main()
程序执行首先初始化主包,然后调用函数 。当该函数调用返回时,程序将退出。它不会等待其他(非)戈鲁廷完成。
main
main
由于你在新的 goroutine 中启动列表程序,因此没有任何“阻塞”,也没有什么可做的(打印后),因此你的应用将结束。请注意,内置 println()
打印到标准错误,这就是为什么您可能看不到任何日志(标准输出和标准错误可能会保存/重定向到不同位置)。main()
"reached here"
最简单的“解决方法”是开始收听:main()
srv := &http.Server{Addr: addr, Handler: router}
if err := srv.ListenAndServe(); err != nil {
log.Fatalf("listenAndServe failed: %v", err)
}
- 1 回答
- 0 关注
- 66 浏览
添加回答
举报
0/150
提交
取消