У меня есть функция, которая возвращает либо 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
является именованным возвращаемым значением, я могу использовать его без инициализации. Он обнуляется по-своему, мне все равно, так как вызывающая функция не должна использовать это значение.