コンテンツにスキップ

バインディング

Ginは、リクエストデータをGoの構造体にパースし、自動的にバリデーションする強力なバインディングシステムを提供します。c.PostForm()を手動で呼び出したりc.Request.Bodyを読み取ったりする代わりに、タグ付きの構造体を定義してGinに処理を任せることができます。

BindとShouldBind

Ginは2つのファミリーのバインディングメソッドを提供しています:

メソッドエラー時使用場面
c.Bindc.BindJSONなど自動的にc.AbortWithError(400, err)を呼び出すGinにエラーレスポンスを処理させたい場合
c.ShouldBindc.ShouldBindJSONなどエラーを返し、自分で処理するカスタムエラーレスポンスが必要な場合

ほとんどの場合、エラーハンドリングをより制御できる**ShouldBindを推奨**します。

簡単な例

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はContent-Typeをチェックしてバインディングエンジンを自動選択します
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")
}

サポートされるフォーマット

Ginは多くのソースからデータをバインドできます:JSONXMLYAMLTOMLフォームデータ(URLエンコードおよびmultipart)、クエリ文字列URIパラメータヘッダー。適切な構造体タグ(jsonxmlyamlformuriheader)を使用してフィールドをマッピングします。バリデーションルールはbindingタグに記述し、go-playground/validatorの構文を使用します。

このセクションの内容