Я читал this blog post, но я все еще не убежден. Я точно знаю, что делать, чтобы получить пользовательские ошибки, которые я могу вернуть из своих функций и обрабатывать вне их.Пользовательская обработка ошибок в Go
Это то, что я сейчас делаю:
func doSomething() int {
x := 0
// Do something with x.
...
if somethingBadHappened {
return -1
}
if somethingElseBadHappened {
return -2
}
return x
}
Это то, что я хотел бы делать:
func doSomething() int, ? {
...
if somethingBadHappened {
return ?, err
}
if somethingElseBadHappened {
return ?, err2
}
return x, nil
}
Но я точно не знаю, как и что замените эти вопросительные знаки.
Хм. Чтобы удовлетворить интерфейс ошибки, мне просто нужно создать какой-то новый тип структуры с строковой переменной в нем и создать реализацию ошибки, правильно? Или есть еще более простой способ? –
@jnml - не следует «возвращать x, nil' быть' return r, nil'? –
@ Ekkehard.Horner: Это может быть 'return r, nil' тоже, но не обязательно. В OP 'x' стоит локальная переменная, и она также имеет здесь значение. В общем, последняя строка может быть либо 'return', либо' reuturn expr1, expr2'. – zzzz