---
title: Ошибки в Go
questionDates:
  q-transfer-0480: '2026-10-01'
  q-transfer-0481: '2026-10-01'
seo:
  description: >-
    Тема «Ошибки в Go» для собеседования Go Developer. Чем sentinel error
    отличается от собственного типа ошибки? Как оборачивать ошибку в Go и
    сохранять ее причину?
  title: Ошибки в Go — Go Developer
---

[Все темы Go Developer](/prep/go-developer)

## Чем sentinel error отличается от собственного типа ошибки? [#q-transfer-0480]

Sentinel error представляет собой экспортированное стабильное значение вроде `io.EOF`, с которым caller сравнивает цепочку через `errors.Is`. Оно подходит одному различимому условию без дополнительных данных, но становится частью API-контракта. Собственный тип ошибки содержит поля, например операцию и код; caller извлекает его через `errors.As`. Тип может поддерживать `Is` для классификации. Сравнение `err == sentinel` ломается после wrapping, поэтому предпочитают `errors.Is`. Не каждую внутреннюю ошибку нужно экспортировать: публичной делают только классификацию, на которую вызывающий код должен осмысленно реагировать.

:::note[Ссылки для изучения]

1. [Ошибки Go: errors.Is, errors.As и оборачивание через %w — справочник пакета errors](https://spec-zone.ru/go/errors/index)
   :::

---

## Как оборачивать ошибку в Go и сохранять ее причину? [#q-transfer-0481]

На границе операции добавляют контекст через `fmt.Errorf("read config %q: %w", path, err)`. Один `%w` или поддерживаемая форма wrapping сохраняет причину в error chain, поэтому caller использует `errors.Is` для класса и `errors.As` для типа. Текст ошибки должен объяснять, что делала текущая функция, не повторяя «error» на каждом слое и не раскрывая секреты. Ошибку обычно логируют один раз на внешней границе с request metadata; логирование на каждом возврате создаёт дубли. Если причина не должна становиться частью публичного API, обёртку и классификацию проектируют осознанно.

:::note[Ссылки для изучения]

1. [Ошибки Go: errors.Is, errors.As и оборачивание через %w — справочник пакета errors](https://spec-zone.ru/go/errors/index)
   :::
