Study
Gin

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.

Editor Latihan

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.