我有一个函数返回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