İçeriğe geç

Bağlama (Binding)

Gin, istek verilerini Go struct’larına ayrıştıran ve otomatik olarak doğrulayan güçlü bir bağlama sistemi sağlar. Manuel olarak c.PostForm() çağırmak veya c.Request.Body okumak yerine, etiketlerle bir struct tanımlar ve Gin’in işi yapmasına izin verirsiniz.

Bind ve ShouldBind karşılaştırması

Gin iki bağlama metod ailesi sunar:

MetodHata durumundaŞu durumda kullanın
c.Bind, c.BindJSON, vb.Otomatik olarak c.AbortWithError(400, err) çağırırGin’in hata yanıtlarını işlemesini istediğinizde
c.ShouldBind, c.ShouldBindJSON, vb.Hatayı size işlemeniz için döndürürÖzel hata yanıtları istediğinizde

Çoğu durumda, hata işleme üzerinde daha fazla kontrol için ShouldBind’ı tercih edin.

Hızlı örnek

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")
}

Desteklenen formatlar

Gin birçok kaynaktan veri bağlayabilir: JSON, XML, YAML, TOML, form verisi (URL-encoded ve multipart), sorgu dizeleri, URI parametreleri ve başlıklar. Alanları eşlemek için uygun struct etiketini (json, xml, yaml, form, uri, header) kullanın. Doğrulama kuralları binding etiketine gider ve go-playground/validator sözdizimini kullanır.

Bu bölümde