Skip to content

Утверждение типа и пользовательские ошибки

Утверждение типа — type assertion.

Интерфейс error предоставляет только один метод, но нам может потребоваться доступ к другим методам реализации error, чтобы правильно обработать ошибку. Например, у тебя может быть несколько временных пользовательских реализаций error, которые можно выполнить повторно — это обозначено методом Temporary().

Интерфейсы дают узкое представление о более широком наборе методов, предоставляемых типами, поэтому, чтобы изменить методы, отображаемые представлением, или полностью удалить их, мы должны использовать утверждение типа.

Следующий пример дополняет в рассмотренный ранее RequestError метод Temporary(), который определит, должны ли вызывающие пользователи повторять запрос.

В main() мы вызываем doRequest (), который возвращает нам интерфейс error. Сначала выводится сообщение об ошибке, возвращаемое методом Error(). Далее мы пытаемся выявить все методы RequestError, используя утверждение типа re, ok :\= err.(*RequestError). Если утверждение типа успешно выполнено, метод Temporary() проверяет, является ли эта ошибка временной. Поскольку StatusCode, установленный функцией doRequest(), равен 503, что соответствует http.StatusServiceUnavailable, это возвращает значение true и выводит This request can be tried again. На практике вместо этого отправляется другой запрос, а не выводится сообщение.