Оркестрация AI: подход LangGraph
Философия Go — простота и контроль. Линейные цепочки
Это превращает «магию» в надёжный процесс:
— управляемый поток (аналог каналов коммуникации);
—
— отсутствие скрытой магии (explicit over implicit).
Хотите понять, как строить такие бэкенды? Курс уже стартовал.
Записаться на курс
Сомневаетесь? Гляньте первую лекцию.
Философия Go — простота и контроль. Линейные цепочки
LangChain — это «спагетти».LangGraph ближе к тому, как мы проектируем микросервисы: чёткие узлы, явные связи, контроль потока.Это превращает «магию» в надёжный процесс:
— управляемый поток (аналог каналов коммуникации);
—
state как единственный источник истины;— отсутствие скрытой магии (explicit over implicit).
Хотите понять, как строить такие бэкенды? Курс уже стартовал.
Записаться на курс
Сомневаетесь? Гляньте первую лекцию.
❤3👾2👍1
Вроде бы простой вопрос, но ответов может быть множество.
0 1 0 1? Или 1 2 3 4? Попробуйте порассуждать, прежде чем смотреть ответ под спойлером
Ответ:
#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
🛠 Трейсинг SQL-запросов в Go
Медленные запросы, N+1, отсутствие индексов — классика жанра при нагруженной работе с БД. Проблема в том, что понять, где именно всё тормозит, не всегда просто. Разберём три подхода к отслеживанию SQL-запросов: от самого простого к наиболее элегантному.
1. Добавляем трейсинг вручную в каждую функцию репозитория:
Проблемы: засоряет код, нужно обновлять при каждом изменении запроса, много дублирования.
2. Обёртка над sql.DB
Создаём структуры-обёртки, которые автоматически оборачивают запросы:
Использование:
Плюсы: явный контроль, легко отключить, минимальные изменения в коде.
3. Обёртка драйвера
Используем кастомный database driver, который полностью скрывает логику трейсинга. Это полностью избавляет от лишнего кода и оставляет бизнес-логику чистой, но в это же время будет сложнее понять, что происходит под капотом у таких решений.
Второй подход — оптимальный баланс между явностью кода и удобством использования. Получаем чистый код репозиториев, автоматический трейсинг всех запросов и возможность легко отключить отслеживание там, где оно не нужно.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoDeep
Медленные запросы, N+1, отсутствие индексов — классика жанра при нагруженной работе с БД. Проблема в том, что понять, где именно всё тормозит, не всегда просто. Разберём три подхода к отслеживанию SQL-запросов: от самого простого к наиболее элегантному.
1. Добавляем трейсинг вручную в каждую функцию репозитория:
func GetUserByEmail(ctx context.Context, db *sql.DB, email string) (*User, error) {
span := tracer.Begin(ctx, "query: users by email")
defer span.Finish()
row := db.QueryRowContext(ctx,
"SELECT id, name, email FROM users WHERE email = $1", email)
// обработка результата...
}Проблемы: засоряет код, нужно обновлять при каждом изменении запроса, много дублирования.
2. Обёртка над sql.DB
Создаём структуры-обёртки, которые автоматически оборачивают запросы:
type TracedDB struct {
db *sql.DB
context context.Context
}
func (tdb *TracedDB) QueryRow(sql string, params ...any) *sql.Row {
span := tracer.Begin(tdb.context, sql)
defer span.Finish()
return tdb.db.QueryRowContext(tdb.context, sql, params...)
}
func (tdb *TracedDB) Exec(sql string, params ...any) (sql.Result, error) {
span := tracer.Begin(tdb.context, sql)
defer span.Finish()
return tdb.db.ExecContext(tdb.context, sql, params...)
}Использование:
// Инициализация
tracedDB := NewTracedDB(ctx, database)
// В репозитории
func (r *Repository) FindUser(ctx context.Context, db *TracedDB, id int64) (*User, error) {
// все запросы автоматически попадают в трейсинг
row := db.QueryRow("SELECT * FROM users WHERE id = $1", id)
}
Плюсы: явный контроль, легко отключить, минимальные изменения в коде.
3. Обёртка драйвера
Используем кастомный database driver, который полностью скрывает логику трейсинга. Это полностью избавляет от лишнего кода и оставляет бизнес-логику чистой, но в это же время будет сложнее понять, что происходит под капотом у таких решений.
Второй подход — оптимальный баланс между явностью кода и удобством использования. Получаем чистый код репозиториев, автоматический трейсинг всех запросов и возможность легко отключить отслеживание там, где оно не нужно.
📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤5
Технически мы вспоминаем последние новости января, но сегодня уже февраль, поэтому дайджест февраля.
— Исследование Go в России
— Task 3.47.0
— 10 чит-кодов для домашнего офиса
— Нестандартные форматы резюме
— Go избавился от блокеров
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👾1
Архитектура агентов: взгляд инженера
Хотя
Современный AI-агент — это не магия, а распределённая система с логикой retry, fallback и валидацией. Если вы проектируете сложные системы, вам полезно понимать, как устроен «мозг» агента изнутри.
Курс по AI-агентам поможет расширить инженерный кругозор.
Записаться на курс
Разбор архитектуры: Смотрите вводный урок бесплатно.
Хотя
LangGraph написан на Python/JS, концепции, которые он внедряет, важны для любого бэкендера. Это чистая инженерия: State Machines, DAGs (и циклические графы), персистентность состояния.Современный AI-агент — это не магия, а распределённая система с логикой retry, fallback и валидацией. Если вы проектируете сложные системы, вам полезно понимать, как устроен «мозг» агента изнутри.
Курс по AI-агентам поможет расширить инженерный кругозор.
Записаться на курс
Разбор архитектуры: Смотрите вводный урок бесплатно.
❤4👾2
🤹♂️ Жонглирование окнами вместо разработки
Разработчик больше десяти лет поддерживает сервис на Go в продакшене. За это время накопилась проблема: локальная разработка — это постоянное переключение между запущенными процессами, логами, SSH-сессиями и несколькими worktree. Держать в голове контекст всех этих частей одновременно оказалось утомительно.
Решение — собственная разработка на Go под названием Trellis. Инструмент объединяет весь цикл работы в одну среду: локальные сервисы, удалённые логи, SSH-сессии и worktree синхронизируются автоматически. Переключили worktree — вместе с ним переехали все связанные процессы, терминалы и логи.
➡️ Чекнуть проект
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoLive
Разработчик больше десяти лет поддерживает сервис на Go в продакшене. За это время накопилась проблема: локальная разработка — это постоянное переключение между запущенными процессами, логами, SSH-сессиями и несколькими worktree. Держать в голове контекст всех этих частей одновременно оказалось утомительно.
Решение — собственная разработка на Go под названием Trellis. Инструмент объединяет весь цикл работы в одну среду: локальные сервисы, удалённые логи, SSH-сессии и worktree синхронизируются автоматически. Переключили worktree — вместе с ним переехали все связанные процессы, терминалы и логи.
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👾1
Давайте разберёмся, что делает анализатор omitzero.
Представьте, что вы пишете структуру с вложенными типами:
type User struct {
Name string `json:"name,omitempty"`
Address Address `json:"address,omitempty"`
}Многие ожидают, что
omitempty на поле Address сработает так же, как на Name — пропустит поле при сериализации, если оно пустое. Но нет.Для полей-структур тег
omitempty вообще ничего не делает. Пустая структура всё равно попадёт в JSON как "address": {}.omitzero находит все такие случаи и предлагает два варианта:1. Удалить тег, если он вам не нужен — зачем держать код, который ничего не делает.
2. Заменить на
omitzero — он работает правильно и пропустит поле, если структура имеет нулевое значение.Некоторые библиотеки сериализации интерпретируют
json:",omitzero" по-своему. Модернизатор автоматически пропускает пакеты с аннотациями +kubebuilder, чтобы ничего не сломать.📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
Новый кросс-платформенный фреймворк для создания нативных мобильных приложений. Без JavaScript, без костылей, без виртуальных машин — только Go.
Вы остаётесь в экосистеме Go. Используете привычные инструменты, библиотеки, тестирование. Не нужно учить Kotlin, Swift или какой-то специфичный DSL для UI.
Как начать работать:
# Ставите CLI
go install github.com/go-drift/drift/cmd/drift@latest
# Создаёте проект
drift init my-app
cd my-app
# Запускаете на Android
drift run android
Автор признаётся, что вдохновением для него был фреймворк Flutter. В репозитории лежит showcase-приложение с примерами всех виджетов — можете посмотреть, как это выглядит в реальности.
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
😁18🔥14❤5❤🔥2
Два расширения VS Code — «ChatGPT - 中文版» с миллионом установок и «ChatMoss» со 150 тысячами установок — работают как AI-помощники, но крадут весь ваш код и отправляют на сервера в Китай.
Расширения действительно работают. Они отвечают на вопросы, дополняют код, объясняют ошибки. Поэтому их установили 1.5 млн разработчиков. Под капотом — три скрытых канала утечки.
Три канала кражи данных
1. При открытии файла расширение читает его целиком, кодирует в Base64 и отправляет на сервер. Не 20 строк для автодополнения — весь файл. Триггер срабатывает на каждое изменение.
2. Сервер может удалённо запустить массовый сбор до 50 файлов без взаимодействия пользователя. Ваша кодовая база — в одной команде от полной эксфильтрации.
3. Невидимый iframe загружает четыре аналитических SDK: Zhuge.io, GrowingIO, TalkingData и Baidu Analytics; для сбора данных о вас, вашей компании и паттернах работы. Аналитика показывает, чьи файлы стоит красть.
Разработчики доверились, потому что расширения реально работают. Прошли модерацию маркетплейса. Имеют положительные отзывы. И воруют ваш код.
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔10❤2🤩2
🔄 Обновление Fiber
Вышел Fiber v3.0.0 – крупное мажорное обновление фреймворка.
• Главное архитектурное изменение: Ctx как интерфейс
В предыдущих версиях контекст был конкретным типом, что делало невозможным создание кастомных реализаций или расширение функциональности без форков. Теперь
• Интеграция со стандартной библиотекой: context.Context
Долгое время одной из критик Fiber было отсутствие совместимости с контекстом из стандартной библиотеки Go.
В третьей версии
• Новая система Binding: единое API для парсинга данных
В версии 2 для извлечения данных из запроса нужно было использовать разные методы:
Третья версия вводит унифицированный Binding API, который умеет извлекать данные из всех источников через единый интерфейс. Метод
• Extractors: универсальная система извлечения данных
Новый пакет
Теперь есть единая система экстракторов с общим API. Вы создаёте экстрактор, указывая источник данных (cookie, header, query, form), и используете его везде.
И ещё куча исправлений и обновлений, обо всех можно почитать в репозитории проекта.
➡️ Release Notes
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoLive
Вышел Fiber v3.0.0 – крупное мажорное обновление фреймворка.
• Главное архитектурное изменение: Ctx как интерфейс
В предыдущих версиях контекст был конкретным типом, что делало невозможным создание кастомных реализаций или расширение функциональности без форков. Теперь
fiber.Ctx — это интерфейс с десятками методов, а стандартная реализация называется DefaultCtx• Интеграция со стандартной библиотекой: context.Context
Долгое время одной из критик Fiber было отсутствие совместимости с контекстом из стандартной библиотеки Go.
В третьей версии
fiber.Ctx реализует интерфейс context.Context, что означает полную совместимость со стандартной экосистемой. Теперь можно передавать Fiber контекст в функции баз данных, gRPC клиенты, любые библиотеки, работающие с контекстом.• Новая система Binding: единое API для парсинга данных
В версии 2 для извлечения данных из запроса нужно было использовать разные методы:
QueryParser() для query параметров, BodyParser() для тела запроса, ParamsParser() для параметров маршрута.Третья версия вводит унифицированный Binding API, который умеет извлекать данные из всех источников через единый интерфейс. Метод
Bind().All() автоматически парсит query параметры, тело запроса, заголовки, параметры маршрута и даже cookies, заполняя вашу структуру данными из всех источников одновременно.• Extractors: универсальная система извлечения данных
Новый пакет
extractors решает распространённую проблему: в разных миддлварах была дублирующаяся логика извлечения токенов из запроса. Каждый миддлвар по-своему искал данные в заголовках, куках или query параметрах.Теперь есть единая система экстракторов с общим API. Вы создаёте экстрактор, указывая источник данных (cookie, header, query, form), и используете его везде.
И ещё куча исправлений и обновлений, обо всех можно почитать в репозитории проекта.
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥15😁2🥱2😢1
Вышла новая версия библиотеки для генерации PDF на Go. Главное обновление — официальная поддержка Python.
Если у вас Python-сервис, но нужна мощная PDF-генерация — можно подключить gopdfsuit, не переписывая проект на Go. В релиз включены примеры кода, чтобы разобраться, как это работает.
Что нового, помимо поддержки питона:
• Добавили поддержку SVG — теперь векторные изображения можно встраивать напрямую в PDF без потери качества.
• Реализовали умные переносы текста, которые укладываются в заданные границы.
• Обновили веб-интерфейс и визуальный редактор — улучшили live-preview при создании шаблонов.
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3
🚀 Первый заказ на фрилансе
Пока все воюют за заказы на биржах, локальный бизнес в радиусе 5 км от вас даже не знает, где искать разработчика. Вы станете единственным, кто предложил помощь, пока остальные штурмуют фриланс-площадки.
➡️ В статье 9 небанальных способов найти первые деньги айтишнику
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
Пока все воюют за заказы на биржах, локальный бизнес в радиусе 5 км от вас даже не знает, где искать разработчика. Вы станете единственным, кто предложил помощь, пока остальные штурмуют фриланс-площадки.
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Разработчик поделился на Reddit своим AI-ассистентом для Dota 2, который анализирует игровую ситуацию в реальном времени и дает тактические советы прямо в игре.
Проект использует Game State Integration от Dota 2 – встроенный механизм, который отправляет JSON с игровым состоянием на HTTP-сервер. Go-приложение принимает эти данные, парсит их в структуры и сохраняет в thread-safe хранилище.
Дальше начинается интересное: система строит промпт не просто из текущего состояния игры, а использует полноценный RAG-пайплайн.
Сначала LLM генерирует поисковые запросы на основе ситуации в игре. Потом эти запросы ищутся в векторной базе знаний, где хранится информация о всех героях, предметах и способностях из Dota 2. Найденные релевантные куски знаний вместе с игровым контекстом формируют финальный промпт для AI.
💬 Где бы вы ещё применили подобные инструменты? Может Counter Strike?
📍 Навигация: Вакансии • Задачи • Собесы
#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22🥱4❤3⚡2
🔄 Ergo Framework v3.2.0
Вышел мажорный релиз Ergo Framework – Go-реализации actor model в стиле Erlang/OTP.
• Безопасность и сетевая инфраструктура
Главное нововведение – полноценная поддержка mutual TLS через новый интерфейс
Вторая важная фича – NAT support через
• Управление процессами
Появился контроль времени инициализации через
При graceful shutdown через
• Новые возможности API
Теперь можно делать синхронные запросы напрямую из
➡️ Release Notes
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoLive
Вышел мажорный релиз Ergo Framework – Go-реализации actor model в стиле Erlang/OTP.
• Безопасность и сетевая инфраструктура
Главное нововведение – полноценная поддержка mutual TLS через новый интерфейс
gen.CertAuthManager. Теперь можно настроить ClientCAs, RootCAs, ClientAuth и ServerName для двусторонней аутентификации между нодами. Вторая важная фича – NAT support через
RouteHost и RoutePort в gen.AcceptorOptions, что решает проблему работы нод за NAT'ом или load balancer'ами.• Управление процессами
Появился контроль времени инициализации через
InitTimeout в gen.ProcessOptions – теперь можно ограничить длительность ProcessInit как для локальных, так и для удаленных процессов.При graceful shutdown через
ShutdownTimeout каждые 5 секунд логируются зависшие процессы с их состоянием и очередью.• Новые возможности API
Теперь можно делать синхронные запросы напрямую из
gen.Node через семейство методов Call*, инспектировать процессы через Inspect, резолвить PID по имени и обратно.📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
Golang разработчик — до 350 000 ₽ и удалёнка.
Middle Golang Developer — 384 700 ₽ и удалёнка США.
Go Tech Lead — от 400 000 ₽ и удалёнка Москва.
📍 Навигация: Вакансии • Задачи • Собесы
#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Разрешение конфликтов в Git через стандартные инструменты часто превращается в мучение. Появился интересный TUI-инструмент на Go — ec, который делает этот процесс значительно удобнее.
ec использует трёхпанельный интерфейс в стиле IntelliJ: слева ours, по центру результат слияния, справа theirs. Инструмент показывает только конфликтные блоки, между которыми можно быстро переключаться через
n/p.Можно запустить просто ec без аргументов внутри репозитория с конфликтами – инструмент покажет список файлов и даст выбрать нужный. Есть интеграция с git mergetool через конфиг
[mergetool "ec"].В репозитории есть минималистичный плагин для Neovim, который открывает ec в терминальном буфере.
Важный момент: ec не запускает git add после записи результата – это остаётся на усмотрение пользователя.
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤5🥱1
🔄 Три Go обновления
Команда Go выпустила срочные обновления безопасности: стабильные версии Go 1.25.7 и Go 1.24.13, а также релиз-кандидат go1.26rc3. Релизы содержат исправления двух уязвимостей.
Исправления безопасности
• cmd/cgo — контрабанда кода через doc-комментарии. Расхождение между тем, как Go и C/C++ парсят комментарии, позволяло внедрять код в результирующий бинарный файл cgo. Теперь компилятор cgo больше не будет парсить пользовательские doc-комментарии.
• crypto/tls — неожиданное возобновление сессии при использовании
➡️ Анонсы про релизы и про релиз-кандидата
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoLive
Команда Go выпустила срочные обновления безопасности: стабильные версии Go 1.25.7 и Go 1.24.13, а также релиз-кандидат go1.26rc3. Релизы содержат исправления двух уязвимостей.
Исправления безопасности
• cmd/cgo — контрабанда кода через doc-комментарии. Расхождение между тем, как Go и C/C++ парсят комментарии, позволяло внедрять код в результирующий бинарный файл cgo. Теперь компилятор cgo больше не будет парсить пользовательские doc-комментарии.
• crypto/tls — неожиданное возобновление сессии при использовании
Config.GetConfigForClient. 📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔4👍1😁1
Можно забыть про:
for i := 0; i < n; i++
С версии 1.22 пишем:
for i := range n { ... }Анализатор
rangeint автоматически подсказывает, где можно заменить. Работает, если переменная цикла и лимит не меняются внутри.Меньше букв, больше Go дзена.
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🥱5😁2❤1😢1
Мем смешной, ситуация — не очень
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoGiggle
📍 Навигация: Вакансии • Задачи • Собесы
#GoGiggle
Please open Telegram to view this post
VIEW IN TELEGRAM
😁15❤4👾1
Функция вызывает саму себя до инициализации. Код может запаниковать или выдать ответ? Давайте подумаем.
📍 Навигация: Вакансии • Задачи • Собесы
#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱11❤1👍1