Тип из условия уже реализует error: у него есть метод Error() string. Значение можно возвращать из функции с результатом error и разбирать через errors.As.
Определение собственного типа ошибки
Тип из условия уже реализует error: у него есть метод Error() string. Значение можно возвращать из функции с результатом error и разбирать через errors.As.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте пользовательский тип ошибки и реализуйте у него метод Error(), чтобы он соответствовал стандартному интерфейсу error.
type MyError struct {
Message string
Status int
}
func (e MyError) Error() string {
return fmt.Sprintf("%s (code %d)", e.Message, e.Status)
}
Ответ
Тип из условия уже реализует error: у него есть метод Error() string. Значение можно возвращать из функции с результатом error и разбирать через errors.As.
Например, return MyError{Message: "invalid request", Status: 400}. Для распознавания используйте var target MyError; if errors.As(err, &target) { ... }. Если возвращаете *MyError, цель As должна соответствовать указательному типу. Не проверяйте причину парсингом текста Error и не помещайте туда секретные данные.