Lewati ke konten

Binding

Gin menyediakan sistem binding yang powerful yang mem-parse data permintaan ke dalam struct Go dan memvalidasinya secara otomatis. Alih-alih memanggil c.PostForm() secara manual atau membaca c.Request.Body, Anda mendefinisikan struct dengan tag dan membiarkan Gin mengerjakannya.

Bind vs ShouldBind

Gin menawarkan dua keluarga metode binding:

MetodeSaat errorGunakan ketika
c.Bind, c.BindJSON, dll.Memanggil c.AbortWithError(400, err) secara otomatisAnda ingin Gin menangani respons error
c.ShouldBind, c.ShouldBindJSON, dll.Mengembalikan error untuk Anda tanganiAnda ingin respons error kustom

Dalam kebanyakan kasus, gunakan ShouldBind untuk kontrol lebih atas penanganan error.

Contoh cepat

type LoginForm struct {
User string `form:"user" binding:"required"`
Password string `form:"password" binding:"required"`
}
func main() {
router := gin.Default()
router.POST("/login", func(c *gin.Context) {
var form LoginForm
// ShouldBind checks Content-Type to select a binding engine automatically
if err := c.ShouldBind(&form); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"status": "logged in"})
})
router.Run(":8080")
}

Format yang didukung

Gin dapat mengikat data dari berbagai sumber: JSON, XML, YAML, TOML, form data (URL-encoded dan multipart), query string, parameter URI, dan header. Gunakan tag struct yang sesuai (json, xml, yaml, form, uri, header) untuk memetakan field. Aturan validasi ditempatkan di tag binding dan menggunakan sintaks go-playground/validator.

Dalam bagian ini