Study
Gin

Validasi Input

Penjelasan

BEDA dengan Echo/Fiber yang butuh library validator terpisah, Gin punya validasi TERINTEGRASI lewat tag binding: di field struct — otomatis dijalankan SAAT c.ShouldBindJSON() dipanggil, TANPA perlu memanggil fungsi validasi terpisah. Di balik layar, Gin tetap memakai go-playground/validator, cuma sudah terhubung otomatis.

Contoh Konsep

type ProdukRequest struct {
	Nama  string  `json:"nama" binding:"required,min=3"`
	Harga float64 `json:"harga" binding:"required,gte=0"`
}

r.POST("/produk", func(c *gin.Context) {
	var req ProdukRequest
	if err := c.ShouldBindJSON(&req); err != nil {
		// error ini SUDAH termasuk pelanggaran validasi, bukan cuma error parsing JSON
		c.JSON(422, gin.H{"error": err.Error()})
		return
	}
	c.JSON(201, req)
})

Praktikum

Tambahkan tag binding ke ArtikelRequest: Judul wajib string minimal 5 karakter (binding:"required,min=5"), Isi wajib diisi (binding:"required"). Pastikan c.ShouldBindJSON() sudah otomatis memvalidasinya.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Karena validasi Gin sudah terintegrasi di c.ShouldBindJSON(), kamu TIDAK BISA membedakan dari err saja apakah gagal karena JSON-nya malformed ATAU karena data-nya melanggar aturan validasi — kalau butuh membedakan dua kasus itu secara eksplisit, perlu penanganan tambahan (mis. cek tipe error validator.ValidationErrors).