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