Graceful Shutdown
Penjelasan
Karena Gin dibangun di atas net/http standar (tidak seperti Fiber yang pakai fasthttp), graceful shutdown Gin memakai http.Server STANDAR Go langsung, dengan r.Handler() sebagai handler-nya — pola ini sama dengan graceful shutdown aplikasi Go net/http pada umumnya, bukan API khusus Gin.
Contoh Konsep
srv := &http.Server{
Addr: ":8080",
Handler: r, // *gin.Engine memenuhi interface http.Handler
}
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatal(err)
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt)
<-quit
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
srv.Shutdown(ctx)
Praktikum
Jelaskan (sebagai catatan) kenapa graceful shutdown Gin memakai http.Server standar langsung, BUKAN method khusus seperti r.Shutdown(), berbeda dari Echo (e.Shutdown()) atau Fiber (app.ShutdownWithTimeout()).
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
*gin.Engine (hasil gin.Default()/gin.New()) MEMENUHI interface http.Handler standar Go — inilah alasan kenapa Gin bisa langsung dipasangkan ke http.Server biasa tanpa API graceful shutdown khusus, konsekuensi langsung dari desain Gin yang dibangun di atas net/http, bukan abstraksi terpisah seperti Fiber.