اتصال رشته پرسوجو یا داده ارسالی
ShouldBind بهصورت خودکار موتور اتصال را بر اساس متد HTTP و هدر Content-Type انتخاب میکند:
- برای درخواستهای GET، از اتصال رشته پرسوجو (تگهای
form) استفاده میکند. - برای درخواستهای POST/PUT، هدر
Content-Typeرا بررسی میکند — از اتصال JSON برایapplication/json، XML برایapplication/xml، و اتصال فرم برایapplication/x-www-form-urlencodedیاmultipart/form-dataاستفاده میکند.
این بدین معنی است که یک handler واحد میتواند داده را هم از رشتههای پرسوجو و هم از بدنه درخواست بدون انتخاب دستی منبع دریافت کند.
package main
import ( "log" "net/http" "time"
"github.com/gin-gonic/gin")
type Person struct { Name string `form:"name"` Address string `form:"address"` Birthday time.Time `form:"birthday" time_format:"2006-01-02" time_utc:"1"`}
func main() { route := gin.Default() route.GET("/testing", startPage) route.POST("/testing", startPage) route.Run(":8085")}
func startPage(c *gin.Context) { var person Person if err := c.ShouldBind(&person); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return }
log.Printf("Name: %s, Address: %s, Birthday: %s\n", person.Name, person.Address, person.Birthday) c.JSON(http.StatusOK, gin.H{ "name": person.Name, "address": person.Address, "birthday": person.Birthday, })}تست
# GET with query string parameterscurl "http://localhost:8085/testing?name=appleboy&address=xyz&birthday=1992-03-15"# Output: {"address":"xyz","birthday":"1992-03-15T00:00:00Z","name":"appleboy"}
# POST with form datacurl -X POST http://localhost:8085/testing \ -d "name=appleboy&address=xyz&birthday=1992-03-15"# Output: {"address":"xyz","birthday":"1992-03-15T00:00:00Z","name":"appleboy"}
# POST with JSON bodycurl -X POST http://localhost:8085/testing \ -H "Content-Type: application/json" \ -d '{"name":"appleboy","address":"xyz","birthday":"1992-03-15"}'# Output: {"address":"xyz","birthday":"1992-03-15T00:00:00Z","name":"appleboy"}