Middleware Dasar
Penjelasan
Middleware Gin bertipe gin.HandlerFunc juga (SAMA seperti handler biasa) — dipanggil lewat r.Use(), dan WAJIB memanggil c.Next() untuk meneruskan ke handler/middleware berikutnya, mirip pola Fiber. Kalau tidak memanggil c.Next() dan tidak mengirim response, request akan menggantung sama seperti framework Go lainnya.
Contoh Konsep
func CekUmur() gin.HandlerFunc {
return func(c *gin.Context) {
umur, _ := strconv.Atoi(c.Query("umur"))
if umur < 18 {
c.JSON(403, gin.H{"error": "Akses ditolak, umur minimal 18 tahun"})
c.Abort() // hentikan pipeline, JANGAN lanjut ke handler berikutnya
return
}
c.Next()
}
}
r.GET("/dewasa", CekUmur(), func(c *gin.Context) {
c.String(200, "Selamat datang!")
})
Praktikum
Buat middleware CekJamKerja() gin.HandlerFunc yang menolak akses (403 + c.Abort()) kalau jam sekarang (time.Now().Hour()) di luar rentang 8-17, dan memanggil c.Next() kalau masih dalam jam kerja. Pasangkan ke route GET /admin.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
c.Abort() PENTING dipanggil sebelum mengirim response error di tengah middleware — TANPA c.Abort(), Gin TETAP melanjutkan ke handler/middleware berikutnya walau kamu sudah mengirim response, berpotensi mengirim response KEDUA yang konflik. c.Abort() memberi tahu Gin untuk berhenti di pipeline saat ini.