[{"data":1,"prerenderedAt":110},["ShallowReactive",2],{"content:\u002F02-functions-errors\u002F00-intro":3},{"title":4,"description":5,"path":6,"body":7},"Введение в функции и ошибки","Этот модуль про то, как в Go оформляется поведение: вызовы функций, отложенные действия и работа с ошибками. На этом уровне уже видно отличие Go от языков, где исключения и наследование диктуют основную форму программы.","\u002F02-functions-errors\u002F00-intro",{"type":8,"value":9,"toc":103},"minimark",[10,14,17,20,23,28,66,68,72,81,84,86,90],[11,12,4],"h1",{"id":13},"введение-в-функции-и-ошибки",[15,16,5],"p",{},[15,18,19],{},"В Go функция обычно маленькая, явно принимает зависимости и явно возвращает ошибку. Это может выглядеть многословно, зато делает поток выполнения читаемым: видно, где произошёл сбой, кто его обработал и какие ресурсы закрываются.",[21,22],"hr",{},[24,25,27],"h2",{"id":26},"что-будет-внутри","Что будет внутри",[29,30,31,35,42,52,55],"ul",{},[32,33,34],"li",{},"функции как значения, аргументы, возвращаемые значения, замыкания;",[32,36,37,41],{},[38,39,40],"code",{},"defer",": порядок выполнения, захват аргументов, типичные ловушки;",[32,43,44,47,48,51],{},[38,45,46],{},"panic"," и ",[38,49,50],{},"recover",": где уместны, а где ломают читаемость;",[32,53,54],{},"ошибки как обычные значения;",[32,56,57,58,61,62,65],{},"оборачивание ошибок и проверка причин через ",[38,59,60],{},"errors.Is"," \u002F ",[38,63,64],{},"errors.As",".",[21,67],{},[24,69,71],{"id":70},"как-понять-что-модуль-освоен","Как понять, что модуль освоен",[15,73,74,75,77,78,80],{},"Вы можете спроектировать функцию так, чтобы её контракт был понятен по сигнатуре. Вы не прячете штатные проблемы в ",[38,76,46],{},", не теряете исходную ошибку при оборачивании и понимаете, почему ",[38,79,40],{}," удобен для cleanup, но не бесплатен как магия.",[15,82,83],{},"На практике это означает спокойный код: ресурсы закрываются рядом с местом открытия, ошибки возвращаются с контекстом, а вызывающая сторона может принять нормальное решение.",[21,85],{},[24,87,89],{"id":88},"рабочие-ориентиры","Рабочие ориентиры",[29,91,92,95,100],{},[32,93,94],{},"Ошибка в Go — часть результата, а не исключительная ветка вселенной.",[32,96,97,99],{},[38,98,40],{}," ставьте сразу после успешного получения ресурса.",[32,101,102],{},"Чем проще сигнатура функции, тем легче тестировать и переиспользовать код.",{"title":104,"searchDepth":105,"depth":105,"links":106},"",2,[107,108,109],{"id":26,"depth":105,"text":27},{"id":70,"depth":105,"text":71},{"id":88,"depth":105,"text":89},1781022063728]