Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpErEM 38 of 280 menu
◀ ▶

Метод текста в Go

Тип становится ошибкой, когда у него есть метод, возвращающий строку. У встроенного интерфейса error в списке один такой метод с именем Error. Структура с полями может реализовать его и хранить данные, из которых собирают сообщение для человека.

Опишем ошибку пути с вложенной причиной и метод текста на указателе:

package main import ( "errors" "fmt" ) type PathError struct { Path string Err error } func (e *PathError) Error() string { return e.Path + ": " + e.Err.Error() } func main() { inner := errors.New("not found") pe := &PathError{Path: "main.go", Err: inner} fmt.Println(pe.Error()) }

На экране строка с путем и текстом внутренней ошибки. Метод Error склеивает Path и результат Err. Получатель указатель, чтобы не копировать структуру при каждом обращении к тексту.

Тот же тип можно создать с другим путем, не меняя объявление метода:

package main import ( "errors" "fmt" ) type PathError struct { Path string Err error } func (e *PathError) Error() string { return e.Path + ": " + e.Err.Error() } func main() { pe := &PathError{ Path: "data.txt", Err: errors.New("denied"), } fmt.Println(pe.Error()) }

Дан тип CodeError с полями Code типа int и Msg типа string. Добавьте метод текста, который возвращает сообщение из Msg, и выведите его у значения с 404 и "missing".

Дан следующий код:

package main import "errors" type PathError struct { Path string Err error } pe := &PathError{ Path: "main.go", Err: errors.New("fail"), }

Допишите метод Error на указателе и выведите текст ошибки.

Скажите, какой результат должен иметь метод, чтобы тип подошел под интерфейс error.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить