in main.go [40:72]
func main() {
ctx := context.Background()
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
log.Printf("listening on port %s", port)
projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
app, err := newApp(ctx, port, projectID)
if err != nil {
log.Fatalf("unable to initialize application: %v", err)
}
log.Println("starting HTTP server")
go func() {
if err := app.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("Server closed: %v", err)
}
}()
// Listen for SIGINT to gracefully shutdown.
nctx, stop := signal.NotifyContext(ctx, os.Interrupt, os.Kill)
defer stop()
<-nctx.Done()
log.Println("shutdown initiated")
// Cloud Run gives apps 10 seconds to shutdown. See
// https://cloud.google.com/blog/topics/developers-practitioners/graceful-shutdowns-cloud-run-deep-dive
// for more details.
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
defer cancel()
app.Shutdown(ctx)
log.Println("shutdown")
}