Study
Gin

Query String & Request Body

Penjelasan

Query string diakses lewat c.Query("nama") (kosong kalau tidak ada) atau c.DefaultQuery("nama", "default"). Untuk body request, Gin memakai c.ShouldBindJSON(&struct) — mem-parsing JSON jadi struct Go berdasarkan tag json:, mengembalikan error kalau gagal (BEDA dari BindJSON() yang otomatis mengirim response 400 sendiri kalau gagal).

Contoh Konsep

type ProdukRequest struct {
	Nama  string  `json:"nama"`
	Harga float64 `json:"harga"`
}

r.GET("/cari", func(c *gin.Context) {
	q := c.Query("q")
	halaman := c.DefaultQuery("page", "1")
	c.String(200, fmt.Sprintf("Mencari: %s, halaman: %s", q, halaman))
})

r.POST("/produk", func(c *gin.Context) {
	var req ProdukRequest
	if err := c.ShouldBindJSON(&req); err != nil {
		c.JSON(400, gin.H{"error": err.Error()})
		return
	}
	c.JSON(201, req)
})

Praktikum

Buat struct ArtikelRequest dengan field Judul dan Isi (tag json). Buat route POST /artikel yang meng-c.ShouldBindJSON() body request ke struct itu, merespons gin.H berisi pesan konfirmasi.

Editor Latihan

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

Tips

SELALU tulis return setelah mengirim response error di dalam handler Gin (seperti c.JSON(400, ...); return) — karena handler Gin TIDAK berhenti otomatis begitu response dikirim (beda dari Echo/Fiber yang berhenti begitu return error), kalau lupa return, kode di bawahnya TETAP DIJALANKAN dan bisa mengirim response KEDUA yang bikin error runtime.