اتصال Multipart/Urlencoded
ShouldBind بهصورت خودکار Content-Type را تشخیص میدهد و بدنه درخواستهای multipart/form-data یا application/x-www-form-urlencoded را به struct متصل میکند. از تگ form در struct برای نگاشت نام فیلدهای فرم به فیلدهای struct و از binding:"required" برای اجباری کردن فیلدها استفاده کنید.
این معمولاً برای فرمهای ورود، صفحات ثبتنام، یا هر ارسال فرم HTML استفاده میشود.
package main
import ( "net/http"
"github.com/gin-gonic/gin")
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 automatically selects the right binding based on Content-Type if err := c.ShouldBind(&form); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return }
if form.User == "user" && form.Password == "password" { c.JSON(http.StatusOK, gin.H{"status": "you are logged in"}) } else { c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"}) } })
router.Run(":8080")}تست
# Multipart formcurl -X POST http://localhost:8080/login \ -F "user=user" -F "password=password"# Output: {"status":"you are logged in"}
# URL-encoded formcurl -X POST http://localhost:8080/login \ -d "user=user&password=password"# Output: {"status":"you are logged in"}
# Wrong credentialscurl -X POST http://localhost:8080/login \ -d "user=wrong&password=wrong"# Output: {"status":"unauthorized"}
# Missing required fieldcurl -X POST http://localhost:8080/login \ -d "user=user"# Output: {"error":"Key: 'LoginForm.Password' Error:Field validation for 'Password' failed on the 'required' tag"}