Практика на свои ошибки в Go
Дан следующий код:
package main
import (
"errors"
"fmt"
)
type PathError struct {
Path string
Err error
}
inner := errors.New("fail")
Допишите метод Error, создайте
PathError с путем "main.go"
и выведите текст ошибки.
Даны переменные:
package main
import (
"errors"
"fmt"
)
type PathError struct {
Path string
Err error
}
func (e *PathError) Error() string {
return e.Path + ": " + e.Err.Error()
}
func fetch(path string) error {
return &PathError{
Path: path,
Err: errors.New("timeout"),
}
}
Вызовите fetch с "api.cfg"
в main и выведите ошибку.
Дана ошибка:
package main
import (
"errors"
"fmt"
)
type PathError struct {
Path string
Err error
}
func (e *PathError) Error() string {
return e.Path + ": " + e.Err.Error()
}
base := &PathError{
Path: "main.go",
Err: errors.New("fail"),
}
err := fmt.Errorf("save: %w", base)
Достаньте Path из PathError
внутри err и выведите его.
Дан следующий код:
package main
import (
"errors"
"fmt"
)
type PathError struct {
Path string
Err error
}
func (e *PathError) Error() string {
return e.Path + ": " + e.Err.Error()
}
inner := &PathError{
Path: "log.txt",
Err: errors.New("denied"),
}
mid := fmt.Errorf("step: %w", inner)
outer := fmt.Errorf("job: %w", mid)
Проверьте, есть ли в outer тип
PathError, и выведите поле
Path при успехе.
Даны переменные:
package main
import (
"errors"
"fmt"
)
type PathError struct {
Path string
Err error
}
func (e *PathError) Error() string {
return e.Path + ": " + e.Err.Error()
}
func ok() error {
return nil
}
Сравните результат ok с nil
и выведите "done" при отсутствии
ошибки.
Создайте тип LineError с полем
Line типа int и методом
текста "line N" с подставленным
номером. Верните его из функции с
результатом error и выведите
текст в main для 12.