Интерфейс error
Интерфейс error является встроенным интерфейсом в Go, предназначенным для представления ошибок. Он определен следующим образом:
type error interface {
Error() string
}
Любой тип, реализующий метод Error() string, автоматически удовлетворяет интерфейсу error. Это позволяет создавать собственные типы ошибок, а также использовать стандартные функции для работы с ошибками, такие как errors.New и fmt.Errorf.
Синтаксис
type error interface {
Error() string
}
Метод Error возвращает строковое представление ошибки. Обычно это сообщение, описывающее причину возникновения ошибки.
Пример
Создадим простую ошибку с помощью встроенного типа errors.errorString, который реализует интерфейс error:
package main
import (
"errors"
"fmt"
)
func main() {
err := errors.New("something went wrong")
fmt.Println(err)
}
Результат выполнения кода:
"something went wrong"
В этом примере мы использовали функцию errors.New, которая создает новую ошибку с переданным текстовым сообщением.
Пример
Создадим пользовательский тип ошибки, реализующий интерфейс error:
package main
import "fmt"
type MyError struct {
Msg string
Code int
}
func (e MyError) Error() string {
return fmt.Sprintf("code %d: %s", e.Code, e.Msg)
}
func main() {
err := MyError{Msg: "invalid input", Code: 400}
fmt.Println(err)
}
Результат выполнения кода:
"code 400: invalid input"
Здесь мы создали структуру MyError, которая имеет поля Msg и Code. Метод Error возвращает форматированное сообщение, включающее оба этих поля.
Пример
Проверим, является ли возвращенная ошибка нулевой, и выведем соответствующее сообщение:
package main
import (
"errors"
"fmt"
)
func main() {
var err error
if err == nil {
fmt.Println("no error")
} else {
fmt.Println("error:", err)
}
err = errors.New("something went wrong")
if err != nil {
fmt.Println("error:", err)
}
}
Результат выполнения кода:
"no error"
"error: something went wrong"
В Go нулевое значение интерфейса error равно nil. Проверка на nil позволяет определить, возникла ли ошибка при выполнении операции.
Смотрите также
-
функцию
errors.New,
которая создает новую ошибку с текстовым сообщением -
функцию
errors.Is,
которая проверяет, является ли ошибка целевой -
функцию
errors.As,
которая проверяет, является ли ошибка определенного типа -
функцию
fmt.Errorf,
которая создает форматированную ошибку