пятница, 1 мая 2020 г.

Три простых способа создать ошибку в Golang

Строковые ошибки

Стандартная библиотека предлагает два готовых варианта.

// простая строковая ошибка
err1 := errors.New("math: square root of negative number")

// с форматированием
err2 := fmt.Errorf("math: square root of negative number %g", x)

Пользовательские ошибки с данными

Чтобы определить пользовательский тип ошибки, вы должны реализовать предварительно объявленный интерфейс error.

type error interface {
    Error() string
}

Вот два примера.

type SyntaxError struct {
    Line int
    Col  int
}

func (e *SyntaxError) Error() string {
    return fmt.Sprintf("%d:%d: syntax error", e.Line, e.Col)
}

type InternalError struct {
    Path string
}

func (e *InternalError) Error() string {
    return fmt.Sprintf("parse %v: internal error", e.Path)
}

Если Foo является функцией, которая может возвращать SyntaxError или InternalError, вы можете обрабатывать два случая, как показано ниже:

if err := Foo(); err != nil {
    switch e := err.(type) {
    case *SyntaxError:
        // Делаем что-нибудь интересное с e.Line и e.Col.
    case *InternalError:
        // Прервать и записать проблему.
    default:
        log.Println(e)
    }
}


Читайте также:


Комментариев нет:

Отправить комментарий