1 回答

TA貢獻(xiàn)1812條經(jīng)驗 獲得超5個贊
一般來說,如果一個函數(shù)未能完成任務(wù),它的返回值應(yīng)該被視為不可靠的。因為 go 中的錯誤是值,調(diào)用者可能會忽略它返回的錯誤。例如:
foo := myType{
Bar: 123,
Foo: "some string",
}
b, _ := json.Marshal(foo)
我忽略了這個錯誤,因為它是我創(chuàng)建的類型,而且我知道它可以被編組。但是,無論哪種方式都被認(rèn)為是不好的做法。盡管如此,現(xiàn)在想象有人調(diào)用您的函數(shù):
slice, _ := mayError()
而你的函數(shù),在向切片中添加 2 個元素后,出錯了。返回部分切片可能并且很可能會導(dǎo)致進(jìn)一步的錯誤行為。這使得代碼難以調(diào)試??偟膩碚f,我會說在這種情況下最好返回一個 nil 切片和一個錯誤。如果代碼如下所示:
slice, _ := mayError() // returns nil, someErr
// panic
if slice[0] != "" {
}
至少錯誤會立即顯示出來,您會看到返回的任何錯誤都mayError被忽略了。這使得代碼更容易調(diào)試/維護(hù)/修復(fù)。
- 1 回答
- 0 關(guān)注
- 132 瀏覽
添加回答
舉報