Study
Gin

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.

Editor Latihan

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.