РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
481 of 1593 menu

Интерфейс error

Интерфейс error является встроенным интерфейсом в Go, который используется для представления ошибок. Он имеет один метод Error() string, возвращающий строковое описание ошибки. Любой тип, реализующий этот метод, автоматически удовлетворяет интерфейсу error. Этот интерфейс широко используется в функциях, которые могут завершиться неудачей, позволяя возвращать информацию об ошибке вместе с результатом.

Синтаксис

type error interface { Error() string }

Для создания ошибки встроенная функция errors.New создает новый объект ошибки с переданным текстом.

err := errors.New("something went wrong")

Пример

Давайте создадим функцию, которая возвращает ошибку при делении на ноль:

package main import ( "errors" "fmt" ) func divide(a, b int) (int, error) { if b == 0 { return 0, errors.New("division by zero") } return a / b, nil } func main() { res, err := divide(10, 0) if err != nil { fmt.Println("Error:", err.Error()) return } fmt.Println("Result:", res) }

Результат выполнения кода:

"Error: division by zero"

Пример

Теперь давайте создадим собственный тип ошибки, реализующий интерфейс error:

package main import ( "fmt" "strconv" ) type ParseError struct { value string } func (e ParseError) Error() string { return "cannot parse value: " + e.value } func parseNumber(s string) (int, error) { num, err := strconv.Atoi(s) if err != nil { return 0, ParseError{value: s} } return num, nil } func main() { res, err := parseNumber("abc") if err != nil { fmt.Println(err.Error()) return } fmt.Println("Parsed number:", res) }

Результат выполнения кода:

"cannot parse value: abc"

Пример

Использование fmt.Errorf для форматирования ошибок с дополнительной информацией:

package main import ( "fmt" ) func processItem(id int, name string) error { if id < 0 { return fmt.Errorf("invalid id: %d", id) } if name == "" { return fmt.Errorf("empty name for id %d", id) } return nil } func main() { err := processItem(-5, "test") if err != nil { fmt.Println(err.Error()) } err = processItem(10, "") if err != nil { fmt.Println(err.Error()) } }

Результат выполнения кода:

"invalid id: -5" "empty name for id 10"

Смотрите также

  • интерфейс interface,
    который описывает набор методов, реализуемых типом
  • интерфейс implementation,
    который описывает реализацию интерфейса
  • интерфейс implicit-implementation,
    который описывает неявную реализацию интерфейсов
  • интерфейс fmt.Stringer,
    который используется для строкового представления типов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить