package main
import("context""net/http""os""os/signal""time""github.com/labstack/echo/v4""github.com/labstack/gommon/log")funcmain(){
// Setup
e := echo.New()
e.Logger.SetLevel(log.INFO)
e.GET("/",func(c echo.Context)error{
time.Sleep(5* time.Second)return c.JSON(http.StatusOK,"OK")})// Start servergofunc(){
if err := e.Start(":1323"); err !=nil&& err != http.ErrServerClosed {
e.Logger.Fatal("shutting down the server")}}()// Wait for interrupt signal to gracefully shutdown the server with a timeout of 10 seconds. // Use a buffered channel to avoid missing signals as recommended for signal.Notify
quit :=make(chan os.Signal,1)
signal.Notify(quit, os.Interrupt)<-quit
ctx, cancel := context.WithTimeout(context.Background(),10*time.Second)defercancel()if err := e.Shutdown(ctx); err !=nil{
e.Logger.Fatal(err)}}