为了账号安全,请及时绑定邮箱和手机立即绑定

已部署的应用程序会立即自行关闭

已部署的应用程序会立即自行关闭

Go
子衿沉夜 2022-09-26 19:44:28
我有一个去休息 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()

程序执行首先初始化主包,然后调用函数 。当该函数调用返回时,程序将退出。它不会等待其他(非)戈鲁廷完成。mainmain

由于你在新的 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)

}


查看完整回答
反对 回复 2022-09-26
  • 1 回答
  • 0 关注
  • 66 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信