errors.As(err, &target)?errors.As(err, &target) ищет в цепочке обёрнутых ошибок первую, которую можно присвоить в target (по типу), и записывает её в target. Возвращает true, если нашёл.
Позволяет извлечь кастомный тип ошибки с дополнительными полями, не полагаясь на текст сообщения.
type PathError struct {
Path string
Err error
}
func (e *PathError) Error() string { return e.Path + ": " + e.Err.Error() }
func (e *PathError) Unwrap() error { return e.Err }
var pe *PathError
if errors.As(err, &pe) {
fmt.Println("path:", pe.Path)
}
target должен быть указателем на тип. Если в цепочке есть ошибка типа *PathError, она будет записана в pe.