我用 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有可能抓住這個嗎?也許這個檢查是不必要的,如果我在我的專案中洗掉這個檢查,代碼會變得更清晰。
uj5u.com熱心網友回復:
可能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 為 JSON 文本 null 的情況。在這種情況下,Unmarshal 將指標設定為 nil。否則, Unmarshal 將 JSON 解組為指標指向的值。如果指標為 nil,則 Unmarshal 為其分配一個新值以指向它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/324323.html
