Для обработки ошибок при декодировании данных из API в Golang можно использовать следующий подход:
- Определить интерфейс APIError. www.joeshaw.org Он будет использоваться во всём приложении для безопасного отображения ошибок через API. www.joeshaw.org Интерфейс возвращает код HTTP-статуса и безопасное для API сообщение об ошибке. www.joeshaw.org
- Создать частные структуры для распространённых ошибок. www.joeshaw.org Например, ErrAuth для отсутствующего или недействительного токена API, ErrNotFound для ссылки на ресурс, который не существует в хранилище данных. www.joeshaw.org Для них нужно создать структуру, которая реализует APIError. www.joeshaw.org
- Связать реальные ошибки с предопределёнными. www.joeshaw.org Для этого нужно определить тип обернутой ошибки, который связывает ошибку из разных частей приложения с одной из предопределённых ошибок. www.joeshaw.org Метод Error такого типа ошибки возвращает сообщение об исходной ошибке, а APIError — безопасное для API сообщение об ошибке обертки. www.joeshaw.org
- Обработать ошибки и безопасно отправить их через API. www.joeshaw.org Для этого в пакете API нужно определить вспомогательную функцию, которая принимает ошибку и сериализует её в JSON. www.joeshaw.org Если ошибка не является APIError, то функция вернёт 500 «Внутренняя серверная ошибка». www.joeshaw.org
Также для получения описания ошибки можно использовать функцию Error() и вывести её на экран. gochronicles.com Если не известно, что делать с ошибкой, можно использовать функцию panic(). gochronicles.com Она выведет на экран ошибку и её трассировку стека. gochronicles.com