Error chain — цепочка обёрнутых ошибок. Каждый fmt.Errorf с %w добавляет звено. Пример: оригинал io.EOF → "read body: EOF" → "fetch user: read body: EOF". errors.Is и errors.As проходят всю цепочку через Unwrap(). Для кастомных типов реализуй метод Unwrap() error. С Go 1.20 можно оборачивать несколько ошибок: fmt.Errorf("%w and %w", err1, err2) — Unwrap() возвращает []error. Цепочка позволяет и добавить контекст, и сохранить возможность проверить оригинальную причину.