evrone / go-clean-template

Clean Architecture template for Golang services

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Обработка ошибок

ysomad opened this issue · comments

commented

У Вас в примерах Вы используете обертку ошибок с помощью fmt.Errorf(), подскажите пожалуйста как можно возвращать ошибку пользователю, например, если ошибка возникла в слое репозитория и от нее зависит возвращаемый статус код и сообщение на клиент.

На данный момент ничего лучше, кроме как реализовывать ошибку с дополнительными полями не придумал, но у этого есть проблема, связанная с тем, что не все ошибки могут иметь сообщение, которое возвращается клиенту:

type appError struct {
	err     error
	errType errorType
	detail  string
}

@ysomad
Как раз все сделано через fmt.Errorf("%w") чтобы решить и этот кейс.
На уровне "ручек" можно делать проверку по типу:

if errors.Is(err, sql.ErrNoRows) {
    ... // 404 записи нет
}

if errors.Is(err, service.ErrBizLogic) {
    ... // 400 бизнес логика
}
commented

Получается "ручной" обработки ошибок в хендлерах не избежать) Хорошо, спасибо огромное и хорошего дня!