千家信息网

如何在gin框架中利用结构体来获取参数

发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,这篇文章主要介绍"如何在gin框架中利用结构体来获取参数",在日常操作中,相信很多人在如何在gin框架中利用结构体来获取参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2024年11月14日如何在gin框架中利用结构体来获取参数

这篇文章主要介绍"如何在gin框架中利用结构体来获取参数",在日常操作中,相信很多人在如何在gin框架中利用结构体来获取参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何在gin框架中利用结构体来获取参数"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

我们在写http请求的时候都会遇到后端的Handler是如何来接受请求的参数,我们在请求的时候有表单请求,ajax请求(参数是json),如下:

http://localhost:8080/bind?name=tim&age=1

在gin框架中我们是怎么利用结构体来获取参数呢? 其实很简单我们直接看代码

engine.GET("/bind", handler.BindHandler)package handlerimport (        "fmt"        "github.com/gin-gonic/gin")// 定义结构体type Member struct {        Name string `form:"name"`        Age  int    `form:"age"`}func BindHandler(c *gin.Context) {        m := &Member{}        c.Bind(m)        fmt.Println(m)        c.JSON(200, gin.H{                "code": "ok",        })}

就是利用Bind函数将参数和结构体进行绑定

// Bind checks the Content-Type to select a binding engine automatically,// Depending the "Content-Type" header different bindings are used://     "application/json" --> JSON binding//     "application/xml"  --> XML binding// otherwise --> returns an error.// It parses the request's body as JSON if Content-Type == "application/json" using JSON or XML as a JSON input.// It decodes the json payload into the struct specified as a pointer.// It writes a 400 error and sets Content-Type header "text/plain" in the response if input is not valid.func (c *Context) Bind(obj interface{}) error {        b := binding.Default(c.Request.Method, c.ContentType())        return c.MustBindWith(obj, b)}

Bind的注释可以看出如何绑定和绑定的格式和Content-Type有很大的关系,从源码可以看出有很多类型格式的数据都都可以进行绑定

// BindJSON is a shortcut for c.MustBindWith(obj, binding.JSON).func (c *Context) BindJSON(obj interface{}) error {        return c.MustBindWith(obj, binding.JSON)}// BindXML is a shortcut for c.MustBindWith(obj, binding.BindXML).func (c *Context) BindXML(obj interface{}) error {        return c.MustBindWith(obj, binding.XML)}// BindQuery is a shortcut for c.MustBindWith(obj, binding.Query).func (c *Context) BindQuery(obj interface{}) error {        return c.MustBindWith(obj, binding.Query)}// BindYAML is a shortcut for c.MustBindWith(obj, binding.YAML).func (c *Context) BindYAML(obj interface{}) error {        return c.MustBindWith(obj, binding.YAML)}// BindHeader is a shortcut for c.MustBindWith(obj, binding.Header).func (c *Context) BindHeader(obj interface{}) error {        return c.MustBindWith(obj, binding.Header)}// BindUri binds the passed struct pointer using binding.Uri.// It will abort the request with HTTP 400 if any error occurs.func (c *Context) BindUri(obj interface{}) error {        if err := c.ShouldBindUri(obj); err != nil {                c.AbortWithError(http.StatusBadRequest, err).SetType(ErrorTypeBind) // nolint: errcheck                return err        }        return nil}

到此,关于"如何在gin框架中利用结构体来获取参数"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0