Введение в функции и ошибки

Этот модуль про то, как в Go оформляется поведение: вызовы функций, отложенные действия и работа с ошибками. На этом уровне уже видно отличие Go от языков, где исключения и наследование диктуют основную форму программы.

В Go функция обычно маленькая, явно принимает зависимости и явно возвращает ошибку. Это может выглядеть многословно, зато делает поток выполнения читаемым: видно, где произошёл сбой, кто его обработал и какие ресурсы закрываются.


Что будет внутри

  • функции как значения, аргументы, возвращаемые значения, замыкания;
  • defer: порядок выполнения, захват аргументов, типичные ловушки;
  • panic и recover: где уместны, а где ломают читаемость;
  • ошибки как обычные значения;
  • оборачивание ошибок и проверка причин через errors.Is / errors.As.

Как понять, что модуль освоен

Вы можете спроектировать функцию так, чтобы её контракт был понятен по сигнатуре. Вы не прячете штатные проблемы в panic, не теряете исходную ошибку при оборачивании и понимаете, почему defer удобен для cleanup, но не бесплатен как магия.

На практике это означает спокойный код: ресурсы закрываются рядом с местом открытия, ошибки возвращаются с контекстом, а вызывающая сторона может принять нормальное решение.


Рабочие ориентиры

  • Ошибка в Go — часть результата, а не исключительная ветка вселенной.
  • defer ставьте сразу после успешного получения ресурса.
  • Чем проще сигнатура функции, тем легче тестировать и переиспользовать код.