Gin 中 BindJSON 与 ShouldBindJSON 之间的区别

在 golang 中使用 gin 的时候,想知道 BindJSON 和 ShouldBindJSON 在名称上有什么异同,所以写一篇文章。如果您能指出任何错误,我将不胜感激。

关于 Gin

Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。它具有类似 Martini 的 API,性能要好得多——速度提高了 40 倍。

它是一个由 Go 处理的 HTTP Web 框架。它似乎以比 Martini (https://github.com/go-martini/martini) 更好的性能而闻名。

BindJSON vs ShoulBindJSON

下面是基于 GoDoc 的对比(https://godoc.org/github.com/gin-gonic/gin)

BindJSON ShouldBindJSON
原型:MustBindWith 原型:ShouldBindWith
使用指定的绑定引擎绑定传递的结构指针。如果发生错误,HTTP 400 会中止请求。 使用指定的绑定引擎绑定传递的结构指针

换句话说,这是↓

源代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
//MustBindWith(BindJSON)
func (c *Context) MustBindWith(obj interface{}, b binding.Binding) error {
    if err := c.ShouldBindWith(obj, b); err != nil {
        c.AbortWithError(http.StatusBadRequest, err).SetType(ErrorTypeBind) // nolint: errcheck
        return err
    }
    return nil
}

//ShouldBindWith(ShouldBindJSON)
func (c *Context) ShouldBindWith(obj interface{}, b binding.Binding) error {
    return b.Bind(c.Request, obj)
}

ShouldBindJSON 包含一个以 400 状态返回错误的函数,不是吗?

如果你想做自己的错误处理,使用 ShouldBindJSON 似乎更好! 我学会了。

来源

Qiita: https://qiita.com/ko-watanabe/items/64134c0a3871856fdc17