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

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

@Golang_google - Golang

@golangl - golang chat

@GolangJobsit - golang channel jobs

@golangtests golang tests

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

№ 5032829002
Download Telegram
Forwarded from Golang
🛠 Как Go понимает ваш код: разбор статьи «The Go Parser»

Внутри компилятора Go после лексера идёт следующий этап - парсер. Он принимает поток токенов и превращает его в абстрактное синтаксическое дерево (AST).

Что делает парсер
- проверяет соответствие кода грамматике Go
- строит AST: функции, выражения, блоки, импорты
- готовит структуру для семантического анализа и генерации кода

Как он работает
- читает токены и смотрит вперёд (lookahead), чтобы решить, что разбирать
- вызывает функции вроде parseFile / parseDecl / parseExpr
- следит за областями видимости и комментариями
- начинает с package → imports → объявления

Пример: даже простой hello-world превращается в дерево, где есть узлы для пакета, функции main, вызова fmt.Println и строкового литерала. Это и есть «скелет» программы, который потом пройдёт проверку типов и оптимизации.

Парсер - это фундамент. Он ловит синтаксические ошибки, создаёт структуру рассуждений для компилятора и позволяет инструментам понимать код как данные. Это точка входа в мир статического анализа и построения своих утилит.

👉 Подробнее

@Golang_google
8👍5
⚡️ Новое исследование, опубликованное в Nature, показывает: языковые модели по-прежнему путают «знание» и «убеждение», смешивая факты и выдумку.

Авторы представили новый бенчмарк KaBLE - 13 тыс. вопросов, 13 задач, 24 протестированные модели — и обнаружили серьёзные провалы в сценариях «ложное убеждение от первого лица».

KaBLE проверяет, понимает ли модель:
- кто что знает,
- кто только верит,
- и соответствует ли утверждение реальности.

На задачах ложного убеждения от первого лица:
- GPT-4o падает с 98.2% до 64.4%,
- DeepSeek R1 — с ~90% до 14.4%.

Это значит, что модели выглядят умными в одной формулировке задач, но ломаются в той, которая ближе к реальному общению пользователей («я думаю…», «я верю…»).

Для ложного убеждения от третьего лица новые модели дают ~95%, старые ~79%,
но у задач от первого лица результаты проседают до 62.6% и 52.5% соответственно.

Разрыв указывает на *атрибутивное смещение*: модель приписывает говорящему фактическое знание, а не различает его убеждения и реальность.

Исследователи также проверили рекурсивные знания — «кто знает, что кто-то знает…».
Новые модели решают многие случаи, но их логические шаги нестабильны и выглядят как сложное сопоставление паттернов, а не как уверенное правило рассуждения.

Итог: LLM всё ещё слабо различают знание, убеждение и факты — особенно когда человек говорит о себе.

nature.com/articles/s42256-025-01113-8
👍84
Как реализовать Outbox-паттерн в Go

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

Как это работает:
- в той же транзакции, где создаёте данные (например, заказ), записываете событие в таблицу outbox
- фоновый процесс периодически выбирает pending-записи через FOR UPDATE SKIP LOCKED
- отправляет событие в брокер
- помечает запись как обработанную

Так достигается атомарность: либо и данные, и событие записаны, либо ничего.
Для Go обычно используют связку Postgres + транзакции + отдельный dispatcher-воркер.

Идеально подходит для микросервисов, e-commerce и всего, что живёт на событиях.

https://packagemain.tech/p/how-to-implement-the-outbox-pattern-in-golang

Видео: https://www.youtube.com/watch?v=iMQ-hb535AE
👍86
Примеры использования client-go — официальной Go-библиотеки для взаимодействия с Kubernetes API. Репозиторий содержит набор минималистичных, но рабочих программ, которые демонстрируют, как использовать client-go для различных задач:

- Получение списка Pod'ов
- Прослушивание событий (watch)
- Использование контроллеров
- Работа с workqueue
- Создание кастомных клиентов
- Реализация информеров
- Примеры c RBAC и настройкой доступа

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

https://github.com/iximiuz/client-go-examples
👍43🔥2
Forwarded from Golang
👣 В Go 1.26 добавят в net.Dialer новые сетевые методы с поддержкой контекста.

Они объединяют эффективность существующих высокоуровневых функций набора соединений с возможностью отмены через Dialer.DialContext — то есть будут быстрее и надёжнее при работе с сетевыми вызовами.

Для тех случаев, когда вы точно знаете сеть (TCP, UDP, IP или Unix-сокет) и хотите:

- минимальные расходы (без лишнего разрешения адресов)
- контроль таймаута/отмены через context
- современный тип адресов из netip


В целом это шаг к более гибкому, эффективному и контролируемому сетевому подключению в Go.

Пример использования:

var d net.Dialer
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

raddr := netip.MustParseAddrPort("127.0.0.1:12345")
conn, err := d.DialTCP(ctx, "tcp", netip.AddrPort{}, raddr)
if err != nil { log.Fatalf("Failed to dial: %v", err) }
defer conn.Close()


http://antonz.org/accepted/net-dialer-context/

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1
🔥 Подборка полезных ресурсов для программистов.

Здесь ты найдёшь всё это - коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!

AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Devops: t.me/DevOPSitsec
Собеседования DS: t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_1001_notes
Java: t.me/java_library
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://t.me/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat

💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy
Папка Linux:https://t.me/addlist/w4Doot-XBG4xNzYy

😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno

🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy

Сохрани себе, чтобы не потерять!
1
Sloggo - лёгкий и быстрый сборщик логов на Go по стандарту RFC 5424

Если вам нужен простой, минималистичный и быстрый инструмент для централизованного сбора логов — без тяжёлых ELK, Loki или огромных кластеров — Sloggo выглядит очень достойным вариантом.

Что делает Sloggo:

- принимает логи по TCP и UDP в формате RFC 5424
- хранит их в DuckDB — быстрой встроенной базе данных без лишней настройки
- даёт чистый и удобный веб-интерфейс для поиска и фильтрации
- весит всего ~10 МБ и работает как один процесс
- запускается за секунды, подходит для малых и средних систем

Где полезно:

- домашние серверы и дев-окружения
- небольшие продовые сервисы, которым не нужна тяжёлая лог-инфраструктура
- быстрый сбор логов во время отладки
- системы с минимумом ресурсов (VPS, контейнеры)

https://github.com/phare/sloggo/
👍114😁4🔥3
👣 Как разработчик прошёл своё первое собеседование на 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 в высоконагруженных системах.
👍11🔥41🤔1