Error Handling
Penjelasan
Gin TIDAK punya HTTPErrorHandler terpusat seperti Echo/Fiber — pola umumnya memakai c.Error(err) untuk MENGUMPULKAN error ke c.Errors (slice), lalu ditangani di middleware TERAKHIR yang membaca c.Errors setelah c.Next() dipanggil handler-handler sebelumnya.
Contoh Konsep
func ErrorHandlerMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
c.Next() // jalankan dulu handler-handler berikutnya
if len(c.Errors) > 0 {
c.JSON(500, gin.H{"error": c.Errors.Last().Error()})
}
}
}
r.GET("/produk/:id", func(c *gin.Context) {
// simulasi error:
c.Error(errors.New("produk tidak ditemukan"))
})
Praktikum
Buat middleware ErrorHandlerMiddleware() yang memanggil c.Next() dulu, lalu cek c.Errors — kalau ada isinya, respons c.JSON(500, gin.H{"pesan": ...}). Daftarkan middleware ini PALING AWAL lewat r.Use() sebelum route lain.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Middleware penangkap error seperti ini HARUS didaftarkan PALING AWAL (r.Use() sebelum route lain) — karena c.Next() di dalamnya menjalankan SEMUA handler berikutnya dulu, baru kode SETELAH c.Next() (cek c.Errors) dijalankan setelah semuanya selesai, mirip pola "wrap" di sekitar seluruh proses request.