golang的gin框架,各种接收参数的方式和各种绑定的区别?

gin的文档,接收从客户端发来的各种参数,有两大类方式:

1、使用接收单个参数各种方法:

c.Param()
c.Query
c.DefaultQuery
c.PostForm
c.DefaultPostForm
c.QueryMap
c.PostFormMap
c.FormFile
c.MultipartForm

2、使用各种绑定方法

c.Bind
c.BindJSON
c.BindXML
c.BindQuery
c.BindYAML
c.ShouldBind
c.ShouldBindJSON
c.ShouldBindXML
c.ShouldBindQuery
c.ShouldBindYAML

问题:
绑定方式比上面一类方式有什么优势?为什么要两种并存,如果绑定方便,都用绑定不就行了吗?请大佬指导一下。

阅读 16.3k
1 个回答

其实就是http协议的东西 (多看看http协议

比如 对于请求 url 查询参数用 c.Query

如下面官方的例子中 ?id=1234&page=1 这个,就是 查询参数(query params)
你会看到这个参数就放在url里的

如果参数不是放在url里的,也可以在body里,比如 body 里的x-www-form-urlencoded 参数,如下面的name=manu&message=this_is_great
对于gin,要使用 name := c.PostForm("name") api

关注下 Content-Type 这个字段,表示了body的类型,更多看看这篇文章
https://imququ.com/post/four-...

还有像 c.FormFile,用于处理上传文件的

请求示例

POST /post?id=1234&page=1 HTTP/1.1
Content-Type: application/x-www-form-urlencoded

name=manu&message=this_is_great

代码示例

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") // body 里的x-www-form-urlencoded 参数
        message := c.PostForm("message")

        fmt.Printf("id: %s; page: %s; name: %s; message: %s", id, page, name, message)
    })
    router.Run(":8080")
}

结果输出

id: 1234; page: 1; name: manu; message: this_is_great

这些就是框架提供的抽象了,让你更方便的处理json,xml 等

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题