Card
タイプであるstruct
、またはエラーのいずれかを返す関数があります。
問題は、エラーが発生したときに関数からどのように戻ることができるかということです。構造体には無効であり、タイプ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
、初期化せずに使用できます。独自の方法でゼロにされます。呼び出し元の関数がこの値を使用することは想定されていないため、私はあまり気にしません。