Метод текста в 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.