我有一個去休息 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 關注
- 84 瀏覽
添加回答
舉報
0/150
提交
取消