Введение в функции и ошибки
Этот модуль про то, как в Go оформляется поведение: вызовы функций, отложенные действия и работа с ошибками. На этом уровне уже видно отличие Go от языков, где исключения и наследование диктуют основную форму программы.
В Go функция обычно маленькая, явно принимает зависимости и явно возвращает ошибку. Это может выглядеть многословно, зато делает поток выполнения читаемым: видно, где произошёл сбой, кто его обработал и какие ресурсы закрываются.
Что будет внутри
- функции как значения, аргументы, возвращаемые значения, замыкания;
defer: порядок выполнения, захват аргументов, типичные ловушки;panicиrecover: где уместны, а где ломают читаемость;- ошибки как обычные значения;
- оборачивание ошибок и проверка причин через
errors.Is/errors.As.
Как понять, что модуль освоен
Вы можете спроектировать функцию так, чтобы её контракт был понятен по сигнатуре. Вы не прячете штатные проблемы в panic, не теряете исходную ошибку при оборачивании и понимаете, почему defer удобен для cleanup, но не бесплатен как магия.
На практике это означает спокойный код: ресурсы закрываются рядом с местом открытия, ошибки возвращаются с контекстом, а вызывающая сторона может принять нормальное решение.
Рабочие ориентиры
- Ошибка в Go — часть результата, а не исключительная ветка вселенной.
deferставьте сразу после успешного получения ресурса.- Чем проще сигнатура функции, тем легче тестировать и переиспользовать код.