Тест · Ошибки · урок 3 из 11Тест — как создать ошибкуКак в Go создать новое значение ошибки, с контекстом или без него?[A]Создавайте ошибки только определяя собственную структуру и метод String() у неё; стандартная библиотека вообще не даёт для них никакого конструктора. Чтобы добавить контекст, вы вручную склеиваете строки, ведь fmt.Errorf форматирует обычный текст, но не может вернуть error. Механизма оборачивания тоже нет, поэтому исходная причина всегда теряется, как только вы строите новое сообщение вокруг неё.[B]Создавайте ошибку вызовом panic("message"): вызов останавливает функцию и отдаёт сообщение вызывающему коду как значение error. errors.New существует только внутри тестового кода, а fmt.Errorf лишь печатает текст, ничего не возвращая. Глагол %w — это форматный псевдоним для %v и не имеет отношения к оборачиванию или развёртыванию причины.[C]Используйте errors.New("message") для фиксированного, статического сообщения или fmt.Errorf("context: %v", x), когда нужно вставить детали в текст. Оба возвращают значение, удовлетворяющее интерфейсу error. А fmt.Errorf с глаголом %w дополнительно оборачивает существующую ошибку, поэтому вызывающий код позже найдёт её через errors.Is, чтобы увидеть исходную причину.[D]Используйте errors.New("message") для статического текста или fmt.Errorf("context: %v", x), чтобы вставить детали. Оба дают значение типа интерфейса error. Передача %v в fmt.Errorf ещё и оборачивает внутреннюю ошибку, позволяя вызывающему коду позже найти её через errors.Is, чтобы взглянуть на исходную корневую причину сбоя.Подпишись, чтобы пройти курсКурс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.Продолжить с TelegramВойти другим способом← Назадerrors.New и fmt.ErrorfДалее →Проверка if err != nil