Ваш лайк и подписка — это сигнал, что нам стоит продолжать. А если хотите внести вклад в развитие проекта, поддержите нас на Boosty: https://boosty.to/rustibeyond
Добро пожаловать на Урок 3 по Golang! Сегодня разбираем область видимости — одну из ключевых концепций, которая отличает Go от Rust и других языков.
О чём этот урок?
Мы проведём параллели с сериалом The Office, чтобы на живых примерах показать:
как работают лексические блоки {} и чем они отличаются от Rust‑правил владения;
что такое escape analysis и как компилятор решает, где хранить переменную — в стеке или в куче;
почему в Go нет lifetimes, но есть сборщик мусора (GC) — и где это опасно;
как работает defer и чем он отличается от RAII в Rust;
какие ловушки ждут при возврате ссылок и запуске горутин в циклах.
Что вы узнаете?
Как Go определяет видимость переменных внутри блоков {} и почему это не то же самое, что borrow checker в Rust.
Что такое shadowing и как случайно не создать новую переменную вместо изменения старой.
Как проверить, что переменная «сбежала» в кучу, с помощью флага -gcflags="-m".
Три нюанса defer: LIFO‑порядок, раннее вычисление аргументов и работа при panic.
Почему возврат указателя на локальную переменную в Go работает, а в Rust — нет.
Как избежать race conditions при работе с горутинами и замыканиями.
Примеры из видео:
Сравнение кода на Go и Rust: где компилятор защищает от ошибок, а где доверяет разработчику.
Практический пример «База слухов Dunder Mifflin» с defer, recover() и escape analysis.
Разбор типичных багов: захват переменной цикла в замыкании, висячие ссылки, лишние аллокации.
Домашнее задание (3 уровня сложности):
«Джим»: написать функцию createMemo, скомпилировать с -gcflags="-m" и найти подтверждение, что переменная ушла в кучу.
«Дуайт»: создать функцию withResource с defer, panic и восстановлением через recover().
«Майкл» (бонус): запустить 5 горутин в цикле — сначала с багом, затем правильно, используя sync.WaitGroup.
golang, go, область видимости, escape analysis, defer, сборщик мусора, GC, Rust vs Go, The Office, программирование, уроки go, golang tutorial, go для начинающих, go advanced, go best practices
Информация по комментариям в разработке