У меня есть функция, которая возвращает либо Card
, что является типом struct
, либо ошибкой.
Проблема в том, как я могу вернуться из функции при возникновении ошибки? nil
недопустим для structs, и у меня нет допустимого нулевого значения для моего типа 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
, a сделать его либо nil
, когда есть ошибка, или заставить его указывать фактическое Card
, когда ошибка не возникает, но это довольно неуклюжий.
func canFail() (card *Card, err error) {
return nil, errors.New("not yet implemented");
}
Есть ли лучший способ?
EDIT: Я нашел другой способ, но не знаю, является ли это идиоматическим или даже хорошим стилем.
func canFail() (card Card, err error) {
return card, errors.New("not yet implemented")
}
Так как Card
является именованным возвращаемым значением, я могу использовать его без его инициализации. Он обнуляется по-своему, мне все равно, поскольку вызывающая функция не должна использовать это значение.