get请求的参数获取,普通方式
get请求的参数获取,结构体方式
post请求的参数获取,普通方式
post请求的参数获取,结构体方式
post请求文件参数的参数获取
一般是post的json格式的获取
1、get请求
普通、数组、map,使用Query
请求的地址
http://127.0.0.3:333/get?name=zhngsan&age=25&arr=1&arr=2&arr=3&Map[home]=Beijing&Map[company]=shanghai
func main() {
fun01 := func(ctx *gin.Context) {
name := ctx.Query("name")
age := ctx.Query("age")
arr := ctx.QueryArray("arr")
m := ctx.QueryMap("Map")
ma := make(map[string]any)
ma["name"] = name
ma["age"] = age
ma["arr"] = arr
ma["m"] = m
ctx.JSON(200, ma)
}
engine := gin.Default()
engine.GET("/get", fun01)
err := engine.Run("127.0.0.3:333")
if err != nil {
panic(err)
}
}
2、get请求
的使用结构体,用BindQuery
http://127.0.0.3:333/get?name=zhngsan&age=25&arr=1&arr=2&arr=3&Map[home]=Beijing&Map[company]=shanghai
func main() {
fun01 := func(ctx *gin.Context) {
user := struct {
Name string `form:"name"`
Age int64 `form:"age"`
Arr []int64 `form:"arr"`
Ma map[string]string `form:"Map"` // 不行
}{}
err := ctx.BindQuery(&user)
if err != nil {
panic(err)
}
m := ctx.QueryMap("Map") // 可以去除这两行测试
user.Ma = m
ctx.JSON(200, user)
}
engine := gin.Default()
engine.GET("/get", fun01)
err := engine.Run("127.0.0.3:333")
if err != nil {
panic(err)
}
}
3、post
普通,数组,map数组的匹配,使用PostForm
地址,http://127.0.0.3:333/post
body的form-data,表格的值设置内容
func main() {
fun01 := func(ctx *gin.Context) {
name := ctx.PostForm("name")
age := ctx.PostForm("age")
arr := ctx.PostFormArray("arr")
m := ctx.PostFormMap("Map")
ma := make(map[string]any)
ma["name"] = name
ma["age"] = age
ma["arr"] = arr
ma["m"] = m
ctx.JSON(200, ma)
}
engine := gin.Default()
engine.POST("/post", fun01)
err := engine.Run("127.0.0.3:333")
if err != nil {
panic(err)
}
}
4、post
使用结构体方式,用ShouldBind
地址,http://127.0.0.3:333/post
body的form-data,表格的值设置内容
func main() {
fun01 := func(ctx *gin.Context) {
user := struct {
Name string `form:"name"`
Age int64 `form:"age"`
Arr []int64 `form:"arr"`
Ma map[string]string `form:"Map"` // 不行
}{}
err := ctx.ShouldBind(&user)
if err != nil {
panic(err)
}
m := ctx.PostFormMap("Map") // 可以去除这两行测试
user.Ma = m
ctx.JSON(200, user)
}
engine := gin.Default()
engine.POST("/post", fun01)
err := engine.Run("127.0.0.3:333")
if err != nil {
panic(err)
}
}
5、post
表格的文件,使用MultipartForm
http://127.0.0.3:333/post
body的form-data,表格的文件,设置内容
func main() {
fun01 := func(ctx *gin.Context) {
form, err := ctx.MultipartForm()
if err != nil {
panic(err)
}
// Value map[string][]string
// 只有数组是数组,其他都是键值对
// 没必要使用个使用ctx.shouldBind()或者.PostForm()
for k, v := range form.Value {
fmt.Println(k, v)
}
// File map[string][]*FileHeader
for _, fileArray := range form.File {
for _, v := range fileArray {
ctx.SaveUploadedFile(v, "./"+v.Filename)
}
}
ctx.JSON(200, "ok")
}
engine := gin.Default()
engine.POST("/post", fun01)
err := engine.Run("127.0.0.3:333")
if err != nil {
panic(err)
}
}
6、一般是post
json数据,ShouldBindJSON,其他类型参数注入xml,yaml等道理一样.
全都可以,map也可以
地址
http://127.0.0.3:333/post
body的raw
{
"Name": "zhangsan",
"Age": 18,
"Arr": [ 12,43,22],
"Ma": { "company": "shanghai","home": "chengdu"}
}
func main() {
fun01 := func(ctx *gin.Context) {
user := struct {
Name string `form:"name"`
Age int64 `form:"age"`
Arr []int64 `form:"arr"`
Ma map[string]string `form:"Map"` // 不行
}{}
err := ctx.ShouldBindJSON(&user)
if err != nil {
panic(err)
}
ctx.JSON(200, user)
}
engine := gin.Default()
engine.POST("/post", fun01)
err := engine.Run("127.0.0.3:333")
if err != nil {
panic(err)
}
}