Go 1.13 為錯誤引入了新功能,以簡化錯誤處理。在 Go 1.13 之前,我通過以下方式檢查代碼是否有錯誤:if err == nil { // ...}但 Goerrors.Is()幫助我正確地做到了這一點:這是一種明智的方法,可以讓您的代碼面向未來,并防止您(或您的代碼導(dǎo)入的任何包)將來出現(xiàn)包裝錯誤而引起問題。對于這樣的情況來說這是可以的:if errors.Is(err, sql.ErrNoRows) { // ...}這是否意味著我必須將所有err == nil陳述更改為:if errors.Is(err, nil) { // ...}
2 回答

ITMISS
TA貢獻(xiàn)1871條經(jīng)驗 獲得超8個贊
不,你不知道。error.Is 檢查底層錯誤值。如果某些代碼返回 sql.ErrNoRows 并且稍后決定包裝該錯誤,則errors.Is(err, sql.ErrNoRows) 會像以前一樣繼續(xù)工作,但 err == sql.ErrNoRows 將計算為 false。
nil 錯誤值意味著沒有錯誤,因此沒有任何內(nèi)容可以換行。您無法編寫任何代碼來更改 err != nil 的計算結(jié)果,同時仍然不返回任何錯誤。只有一種方法可以不返回錯誤:nil。

搖曳的薔薇
TA貢獻(xiàn)1793條經(jīng)驗 獲得超6個贊
不,不需要。當(dāng)錯誤與目標(biāo)匹配時,我們使用errors.Is(),如果它等于目標(biāo),則返回true。在您的情況下 err 為零,不能與目標(biāo)一起使用。
- 2 回答
- 0 關(guān)注
- 123 瀏覽
添加回答
舉報
0/150
提交
取消