Golang Books
17K subscribers
334 photos
6 videos
335 files
308 links
Библиотека Golang разработчика

По всем вопросам- @haarrp

@Golang_google - Golang

@golangl - golang chat

@GolangJobsit - golang channel jobs

@golangtests golang tests

@itchannels_telegram - 🔥лучшие ит-каналы

№ 5032829002
Download Telegram
👣 Как разработчик прошёл своё первое собеседование на Senior Backend (Go) благодаря Educative - история от третьего лица

Долгое время он был «уверенным мидлом».
Умел писать фичи, работал с Go, microservices, немного разбирался в распределённых системах.
Но каждый раз, когда он пытался выйти на senior-позицию, всё заканчивалось одинаково:

Он умел делать, но не умел объяснять.

- System design?
- Trade-off'ы?
- Архитектура распределённых систем?
- Конкурентность?
- Сетевые протоколы?

На собеседованиях он будто терял почву под ногами.
Знания были, но целостной картины - нет.

В какой-то момент он решил изменить ситуацию.
И вот путь, который реально сработал — и привёл его к первому офферу Senior Backend Engineer (Go).

Что стало переломным моментом

Он не хотел буткемпов, марафонов и длинных лекций.
Ему нужны были:
- чёткие, короткие объяснения
- визуализации
- практика
- реальные архитектурные примеры


И именно там у него впервые сложилась цельная картина системной архитектуры.

Ниже - точная последовательность курсов, которые он прошёл.

1. Grokking the System Design Interview
Этот курс дал ему главное — структуру мыслей.

До: он уходил в детали и путался.
После: действовал по чёткому фреймворку:
1. Уточнение требований
2. Компоненты
3. Масштабирование
4. Trade-off’ы

В интервью ему особенно помогли примеры из курса:
- rate limiting
- sharding
- caching
- consistent hashing
- message queues
- fan-out patterns

Это был фундамент, который дал более половины успеха.

2. Grokking Modern System Design
Этот курс научил его думать как инженер распределённых систем.

Он разобрал:
- push vs pull модели
- когда выбирать gRPC или REST
- backpressure
- идемпотентные консьюмеры
- стратегии retry и DLQ
- eventual vs strong consistency

Для Go-разработчика это оказалось очень ценным.

3. System Design: Scalability & Distributed Systems Guide
Курс поднял его "архитектурный словарь" на новый уровень.

Он научился говорить как сеньор:
Не только *что* сделать, но *почему*.

Интервьюеры особенно впечатлялись фразами вроде:

> «Здесь нужен write-ahead log для гарантий durability.»
> «Это thundering herd, понадобится request coalescing.»

Именно такие ответы добавляют вес.

4. Concurrency in Go
Поскольку позиция была Go-ориентированной, ему нужно было подтянуть конкурентность.

Курс дал ему:
- worker pools
- пайплайны
- управление context
- каналы vs мьютексы
- deadlocks, races
- архитектуру rate limiters

На интервью ему встретился вопрос:
> «Спроектируй rate limiter в Go.»
Он ответил спокойно — потому что уже делал это в курсе.

5. Grokking the Behavioral Interview
Он думал, что поведенческие вопросы — вторичны.
Оказалось — нет.

Этот курс помог ему собрать истории про:
- конфликты
- провалы
- лидерство
- сложные решения
- ответственность
- коммуникацию

Он подготовил несколько универсальных историй и использовал их в разных компаниях.

Его стратегия подготовки

1) Один system design в день
Тренировал структуру, а не заучивал решения.

2) Один backend-топик в день
Например:
- circuit breaker
- sharding
- replication
- load balancing
- consensus

3) Go: конкуренция, профилирование, память
Углубление того, что отличает senior Go engineer.

4) Поведенческие ответы
Отточенные истории.

5) Мок-интервью
Чтобы снять стресс и уверенно излагать мысли.

На финальном интервью его попросили:
> «Спроектируй систему реальной-временной доставки событий (похожа на pub/sub).
> Нужны масштабируемость и надёжность.»

Несколько месяцев назад он бы провалился.
А теперь спокойно разобрал:
- partitions
- consumer groups
- горизонтальное масштабирование
- backpressure
- retry logic
- идемпотентность
- мониторинг

Итог

Он наконец выучил то, что обычно знают senior-инженеры:

- системное мышление
- понимание распределённых систем
- объяснение архитектурных решений
- trade-off’ы
- чёткая коммуникация

Если кто-то застрял между middle и senior — его опыт показывает, что выбраться можно. Точно так же.

Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
9🤯3👍2🔥2
👣 Учебник Go (Golang) для начинающих

Главная идея Go минимализм: меньше «магии», больше понятного и предсказуемого кода. Поэтому он быстро осваивается, даже если вы только начинаете путь в программировании.

В этом учебнике мы шаг за шагом разберём основные конструкции Go, научимся писать программы, работать с пакетами и запускать простые сервисы. Всё - практично, лаконично и без лишней сложности.

https://uproger.com/uchebnik-go-golang-dlya-nachinayushhih/

Видео: https://www.youtube.com/playlist?list=PLysMDSbb9HcxpAb8lhnMaRpX890wSLz66
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍6😁3🥰2😢1
Media is too big
VIEW IN TELEGRAM
⚡️ Внутренняя Механика Планировщика Go - как реально работает G-P-M под капотом

Go стал популярным благодаря горутинам - быстрым и лёгким. Но настоящая сила в планировщике, который умеет выполнять миллионы задач на ограниченном количестве потоков ОС.

Разбираем устройство модели G-P-M 👇

1. Три основных сущности: G, P, M
- G — горутина: стек, состояние, контекст.
- P — логический процессор, который содержит очередь готовых горутин.
- M — поток ОС, который выполняет горутины из очереди P.

P распределяет работу.
M выполняет её.
G — сама работа.

2. Очереди и балансировка
У каждого P своя локальная очередь.
Если P простаивает, он забирает задачи у других (work stealing).
Это стабилизирует нагрузку и снижает задержки.

3. Блокировки и парковка
Когда горутина блокируется:
- её паркуют
- поток освобождают
- P поднимает другую готовую горутину
- когда syscall завершён, горутину возвращают в очередь

Так минимизируются блокировки потоков ОС.

4. Горутины уступают время сами

Создание новой G, операции с каналами или вызов runtime.Gosched() позволяют планировщику переключить выполнение.

5. Роль GOMAXPROCS
GOMAXPROCS определяет количество P.
Обычно равно числу CPU.
Увеличение сверх количества ядер не ускоряет работу.

6. Почему горутины такие дешёвые?
- стартовый стек около 2 КБ
- автоматическое расширение и сжатие
- быстрые переключения
- минимальная зависимость от ОС

Поэтому легко запускать сотни тысяч и даже миллионы горутин.

Планировщик Go - это компактный и эффективный механизм, который:
- распределяет нагрузку
- минимизирует блокировки
- масштабирует миллионы горутин
- обеспечивает стабильную и предсказуемую конкурентность

Эта архитектура - одна из главных причин успеха Go в высоконагруженных системах.
👍17🔥76🤔1
😎 Найм в компанию, а не в команду: как это работает

Устроиться на работу в компанию, попробовать поработать в разных командах внутри, чтобы выбрать ту самую — звучит как отличный план. В Яндекс Еде это стандартная практика: через буткемп разработчики пробуют разные проекты на практике, чтобы найти тот, где им действительно интересно.

Олег Табота, руководитель команды общих компонентов в Яндекс Еде, написал подробную статью о том, как это работает на практике.

Что внутри:
💠 Как сайдкары избавляют от рутины в поддержке 400+ микросервисов.
💠 Хронология инцидента: что происходит, когда новичок роняет прод.
💠 Как устроены технические процессы, RFC и выбор задач.

Отличный пример того, как выглядит здоровая инженерная культура в бигтехе.

🔗 Читать статью
👍43😁2
✔️ Как Go-компилятор устроен изнутри: Unified IR простыми словами**

Go перешёл на единую внутреннюю форму представления кода - Unified IR. Это тихое, но очень важное изменение, которое делает компилятор проще, чище и мощнее.

🔜 В чём суть Unified IR

Go больше не держит несколько разных форм внутреннего представления для разных этапов компиляции.
Теперь весь типизированный AST сначала сериализуется в бинарный формат, а потом тут же десериализуется в IR, который используется на всех стадиях.

🔜 Зачем так делать

- чтобы избавиться от дублирования логики в разных частях компилятора
- чтобы упрощать такие сложные вещи как generics, инлайнинг и импорт пакетов
- чтобы компилятор стабильно обрабатывал огромные проекты и зависимости

🔜**Как это работает**

1. При компиляции пакета
Go берёт AST → сериализует его → восстанавливает уже как Unified IR → оптимизирует и генерирует код.

2. При импорте зависимостей
Компилятор читает `.pkg`-файлы:
- типы
- функции
- константы
- тела функций, доступные для инлайнинга

И всё это в едином бинарном формате.

🔜 Что хранится внутри Unified IR

Формат разбит на логические секции:
- строки (имена, пути)
- типы
- объекты (функции, переменные)
- тела функций
- метаданные, позиции, generics

Это компактно, быстро и даёт компилятору полную картину.

🔜 Почему это важно

Unified IR стал фундаментом под generics, кросс-пакетный инлайнинг и дальнейшие оптимизации.
Go-компилятор теперь проще развивать, а экосистема — быстрее и производительнее.

https://internals-for-interns.com/posts/go-compiler-unified-ir/
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4
👣 The Secret Life of Go Structs: как устроены структуры в Go и почему они важны

В статье объясняется, что такое struct в Go и почему этот простой механизм лежит в основе большинства пользовательских типов.

Главное:

- struct позволяет объединять связанные данные в один объект.
Пример:
type Person struct { Name string; Age int }
- Если создать структуру без инициализации, её поля получают нулевые значения: пустые строки, 0, false и т.п.
- Можно сразу задать значения:

p := Person{Name: "Alice", Age: 30}

Структуры — удобный способ описывать сущности: книги, пользователей, заказы, конфиги и любые другие объекты.

struct + методы в Go - аналог классов, но проще и без наследования. Логика добавляется через методы внешне.

Композиция важнее наследования: структуры можно вкладывать друг в друга или встраивать, собирая сложные типы из простых.

https://dev.to/aaron_rose_0787cc8b4775a0/the-secret-life-of-go-structs-3aj9
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍2🥰2🤯2🔥1