فرم پرسوجو و ارسال
هنگام پردازش یک درخواست POST، اغلب نیاز دارید مقادیر را هم از رشته پرسوجوی URL و هم از بدنه درخواست بخوانید. Gin این دو منبع را جدا نگه میدارد تا بتوانید به هر کدام بهصورت مستقل دسترسی داشته باشید:
c.Query("key")/c.DefaultQuery("key", "default")— از رشته پرسوجوی URL میخواند.c.PostForm("key")/c.DefaultPostForm("key", "default")— از بدنه درخواستapplication/x-www-form-urlencodedیاmultipart/form-dataمیخواند.
این در APIهای REST رایج است که مسیر منبع را شناسایی میکند (از طریق پارامترهای query مانند id) در حالی که بدنه دادهها را حمل میکند (مانند name و message).
package main
import ( "fmt" "net/http"
"github.com/gin-gonic/gin")
func main() { router := gin.Default()
router.POST("/post", func(c *gin.Context) { id := c.Query("id") page := c.DefaultQuery("page", "0") name := c.PostForm("name") message := c.PostForm("message")
fmt.Printf("id: %s; page: %s; name: %s; message: %s\n", id, page, name, message) c.String(http.StatusOK, "id: %s; page: %s; name: %s; message: %s", id, page, name, message) })
router.Run(":8080")}تست
# Query params in URL, form data in bodycurl -X POST "http://localhost:8080/post?id=1234&page=1" \ -d "name=manu&message=this_is_great"# Output: id: 1234; page: 1; name: manu; message: this_is_great
# Missing page -- falls back to default value "0"curl -X POST "http://localhost:8080/post?id=1234" \ -d "name=manu&message=hello"# Output: id: 1234; page: 0; name: manu; message: hello