亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Go 中返回錯誤時結果值的最佳實踐

在 Go 中返回錯誤時結果值的最佳實踐

Go
紅顏莎娜 2023-06-05 17:28:35
如果您的函數既返回值類型又返回錯誤類型,那么當錯誤類型為非 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被忽略了。這使得代碼更容易調試/維護/修復。


查看完整回答
反對 回復 2023-06-05
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號