Gin 中 BindJSON 与 ShouldBindJSON 之间的区别

2 minute read

在 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//MustBindWith(BindJSON)
 2func (c *Context) MustBindWith(obj interface{}, b binding.Binding) error {
 3    if err := c.ShouldBindWith(obj, b); err != nil {
 4        c.AbortWithError(http.StatusBadRequest, err).SetType(ErrorTypeBind) // nolint: errcheck
 5        return err
 6    }
 7    return nil
 8}
 9
10//ShouldBindWith(ShouldBindJSON)
11func (c *Context) ShouldBindWith(obj interface{}, b binding.Binding) error {
12    return b.Bind(c.Request, obj)
13}

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

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

来源

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