如果您的函數既返回值類型又返回錯誤類型,那么當錯誤類型為非 nil 時確保值類型為 niled/零值是“可行的方法”嗎?例子:func mayError() ([]string, error) {
...
}如果不是,[]string返回值應該是嗎?nilerrornil
1 回答

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