我有一個函數返回Card
,這是一個struct
類型或錯誤。在go中,返回結構或錯誤的慣用方法是什麼?
問題是,如何在發生錯誤時從函數返回? nil
對結構無效,我的Card
類型沒有有效的零值。
func canFail() (card Card, err error) {
// return nil, errors.New("Not yet implemented"); // Fails
return Card{Ace, Spades}, errors.New("not yet implemented"); // Works, but very ugly
}
我發現的唯一的解決方法是使用一個*Card
而非Card
,一個讓它無論是nil
當有錯誤或它指向一個實際的Card
時沒有錯誤發生,但是這是相當笨拙。
func canFail() (card *Card, err error) {
return nil, errors.New("not yet implemented");
}
有沒有更好的方法?
編輯:我找到了另一種方式,但不知道這是慣用的甚至是好的風格。
func canFail() (card Card, err error) {
return card, errors.New("not yet implemented")
}
由於card
是一個命名的返回值,我可以使用它沒有對其進行初始化。它以自己的方式歸零,我並不在乎,因爲調用函數不應該使用這個值。
返回一個指針非常地道,所以你可以使用nil。它有助於避免錯誤,並且在不使用命名的返回值時使早期回報更容易完成。 – 2013-03-11 20:52:09
儘管能夠返回nil而不是指針肯定很方便,但我不會僅僅因爲這個原因而使用指針。返回非零錯誤的事實足以告訴您不要使用'卡'中的數據。你應該檢查錯誤而不是價值。否則,根本無法返回錯誤... – weberc2 2013-03-12 13:49:19