我需要添加nil检查解码与json包的指针值后?

  • 本文关键字:json 指针 解码 添加 nil json go null
  • 更新时间 :
  • 英文 :


我已经用Go写了很长时间了,最近在重写代码时,我遇到了一件奇怪的事情。我做了几次测试,if request == nil检查没有成功。以前,我总是害怕得到一个nil指针异常,所以我到处插入检查。但是在这种情况下,json解码错误处理程序似乎涵盖了所有情况。

var (
request *models.Owner
err     error
)
err = json.NewDecoder(r.Body).Decode(&request)
if err != nil {
render.Render(w, r, response.ErrInvalidRequest(err))
return
}
if request == nil {
render.Render(w, r, response.ErrInvalidRequest("request is nil"))
return
}

if request == nil有可能捕捉到这个吗?也许这个检查是不必要的,如果我在我的项目中删除这个检查,代码将变得更干净。

有可能返回nil错误,request仍然是nil,但前提是输入的JSON是JSONnull值。

例如:

type Owners struct {
Name string
}
var request *Owners
if err := json.Unmarshal([]byte("null"), &request); err != nil {
panic(err)
}
fmt.Println(request == nil)
fmt.Println(request)

这将输出(在Go Playground上试试):

true
<nil>

json.Unmarshal():

要将JSON解封为指针,unmarshal首先处理JSON文本为null的情况。在这种情况下,Unmarshal将指针设置为nil。否则,Unmarshal将JSON反编组为指针指向的值。如果指针为nil,则Unmarshal分配一个新值供其指向。