Библиотека Go-разработчика | Golang
23.7K subscribers
2.4K photos
48 videos
87 files
4.84K links
Все самое полезное для Go-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/32d20779

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
Мультиагентные системы: следующий этап после микросервисов 🚀

Как заставить десятки ботов работать слаженно? Ответ кроется в оркестрации и правильных паттернах. Мы научим вас строить высокопроизводительные системы AI-агентов.

Технологический фокус:

— сборка экосистемы ботов с использованием CrewAI и AutoGen;
— оркестрация процессов и внешних API через n8n;
— использование протокола MCP для эффективного обмена данными;
— оптимизация RAG для доступа к знаниям за миллисекунды.

Поймёте архитектуру «мозга» агента (ReAct) и соберёте дипломный проект: группу автономных сущностей для решения сложных бизнес-задач.

Прокачать навыки
🕺 Итоги года

Последний дайджест 2025 года. Пришла пора подвести итоги самых запоминающихся событий минувших 365 дней.

Февраль — Go 1.24

• Теперь псевдонимы типов поддерживают параметры:
type Set[T comparable] = map[T]bool
type Pair[T any] = struct { First, Second T }


• Встроенные map полностью переписали. Новая реализация на базе Swiss Tables вместо хэшмапы.

Август — Go 1.25

• Раньше GOMAXPROCS устанавливался по числу CPU хоста. Теперь runtime учитывает cgroup-лимиты и автоматически подстраивается. Если лимит CPU ниже числа ядер хоста — GOMAXPROCS возьмёт меньшее значение.

• Green Tea — экспериментальный сборщик мусора

• Постквантовая криптография из коробки

По данным JetBrains:

• 2.2 млн разработчиков используют Go как основной язык

• 11% всех разработчиков планируют изучить Go в ближайший год

Фреймворки

• Gin остаётся лидером — 48% Go-разработчиков
• Fiber растёт — 11%
• Echo стабилен — 16%
• Beego теряет позиции

Инструменты

• GoLand удерживает 47% рынка.
• Cursor уже используют 6% Go-разработчиков.

И было много более мелких, но не менее важных апдейтов, которые можно найти по хэштегу #GoLive

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍5🎉3
👀 Два дня до Нового года

В этом декабре 2025 рабочая неделя сжалась до минимума. Только понедельник и вторник в деле, а дальше праздники до 12 января.

Для разработчиков такие дни часто превращаются в формальность. Кто-то доделывает мелкие таски, чтобы Jira не напоминала в отпуске.

Другие чистят код от предупреждений линтера или пишут тесты, которые откладывали месяцами. Есть и те, кто просто мониторит продакшн, попивая кофе у монитора.

💬 Что будете делать вы? Делитесь микро-планами на микро-неделю 👇

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
5👾1
👨‍💻 Отличаем отсутствие значения от нулевого значения

В Go важно понимать что произошло при чтении данных. Значение реально есть или это просто нулевое значение. Для этого в языке есть привычная конструкция value, ok.

Самый частый кейс это map. Если обратиться к мапе по ключу и ключа нет, Go вернет нулевое значение типа. Проблема в том, что нулевое значение может быть и настоящим значением.

Пример:
users := map[int]string{
1: "Alice",
2: "",
}

name := users[2] // вернет пустую строку и непонятно почему
missing := users[99] // тоже пустая строка и опять непонятно почему

name2, ok2 := users[2] // ok2 true
missing2, ok3 := users[99] // ok3 false

_ = name
_ = missing
_ = name2
_ = missing2


Если нужно только проверить наличие ключа, значение можно игнорировать через _:
if _, ok := users[42]; !ok {
// ключа нет
}


Второй важный кейс это type assertion. Когда есть interface{} и нужно безопасно проверить что внутри лежит конкретный тип, запись s, ok := v.(string) не падает с panic и позволяет обработать ситуацию нормально.

Пример:
var v any = "hello"

s, ok := v.(string)
if ok {
_ = s
} else {
// внутри не string
}


Это базовая защита от двусмысленности. В мапах она отличает отсутствующий ключ от нулевого значения, в интерфейсах помогает проверять тип без panic.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍162
🎄 Забудьте time.Sleep

time.Sleep выглядит просто для пауз в коде, но игнорирует контекст. При shutdown функция досидит задержку и только потом проверит ctx.Done().

В цикле типа for { work(); time.Sleep(5*time.Second) } сигнал отмены не прервёт сон. Функция проснётся, выполнит код и упадёт с ошибкой. В проде это растягивает graceful shutdown.

Лучше select { case <-ctx.Done(): return; default: time.Sleep(d) }. Но sleep всё равно ждёт полного времени — до 5 секунд задержки.

Ещё хуже: time.After(d) создаёт таймер каждый раз, аллоцирует память и утечь.

Оптимально — один таймер:
t := time.NewTimer(d)
for {
select {
case <-ctx.Done():
if !t.Stop() { <-t.C }
return
case <-t.C:
t.Reset(d)
}
work()
}


Таймер переиспользуется, останавливается чисто. Ticker не подходит: тикает независимо от длительности work(), может запускать задачи внахлёст.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👏15👍41👾1
🤔 Не знаете, в чём встречать Новый год? Не беда!

Tproger как раз собрал стек новогодних нарядов, чтобы вы сияли ярче, чем любая гирлянда. Скорее заходите в виртуальную примерочную и выбирайте скин! 💃

Реклама. ИП Михайлишина Гузель Фаниловна.
ИНН 165042823905. Erid 2VtzqukJLdp
😁91👍1
📊 Лучший драйвер для SQL запросов

Свежее сравнение трёх SQLite драйверов в Go 1.25.2: mattn/go-sqlite3, modernc/sqlite, ncruces/go-sqlite3. Тесты на 15 платформах от M1 до RISC-V.

Modernc выиграл общий зачёт. Лучше читает данные и работает с нагрузкой. Mattn хорош только на вставку. Ncruces просто третий.

➡️ Полный бенч тут

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🤔51
💻 Переменные прямо в if

В Go можно объявлять переменные прямо в условии if. Это помогает не разносить временные переменные по всей функции и не держать их живыми дольше чем нужно.

Синтаксис выглядит так
if init statement; condition { ... } else { ... }

Init statement выполняется перед проверкой условия, а переменные из него доступны в condition и в ветках if и else, но не доступны после if.

Самый популярный кейс это обработка ошибок рядом с вызовом функции:
if f, err := os.Open("config.json"); err != nil {
// ошибка открытия
} else {
defer f.Close()
// работа с f
}


Плюс подхода в том, что f и err не остаются в области видимости функции. Это снижает риск случайно использовать не тот err ниже по коду или затереть переменную новым значением.​

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍7🥱3
⛄️ Путь к мечте продолжается

Пока вы думаете, что «не хватает времени» или «сложные обстоятельства» — Стас перенёс две нейрохирургические операции, собирает себя по кусочкам, при этом проходит курс по C++, пилит проекты для портфолио и откликается на вакансии.

➡️ Читать продолжение истории Стаса

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🙏10
🤩 Контекст спасает AI-интеграции

AI-запросы к моделям типа GPT или Llama непредсказуемы по времени. Сервис может зависнуть на час, если провайдер тормозит.

Оборачивайте каждый вызов в контекст:
ctx, cancel := context.WithTimeout(parentCtx, 30*time.Second)
defer cancel()
response, err := client.Generate(ctx, prompt)


Таймаут рубит запрос, освобождает горутину и соединение. Без него один медленный запрос забьёт пул, вызовет каскад отказов.

Middleware паттерн:
func AIHandler(next http.Handler) http.Handler {
return http.HandlerFunc(func(w, r) {
ctx, cancel := context.WithTimeout(r.Context(), 60*time.Second)
defer cancel()
next.ServeHTTP(w, r.WithContext(ctx))
})
}


📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
7🌚4👍3
🆚 Два способа создать пустой байтовый слайс

[]byte{} не равно []byte(nil). Оба пустые, но []byte{} == nil == false []byte(nil) == nil == true.

Разница:
// json.Unmarshal сломается на nil
err := json.Unmarshal(data, &result) // ошибка на []byte(nil)

// append ведёт себя по-разному
append([]byte{}, 1) // новый слайс [1]
append([]byte(nil), 1) // новый слайс [1] (Go фиксит)


Семантика:
[]byte{}     — "пустой буфер, готов к работе"
[]byte(nil) — "данных нет вообще"


Правило: []byte{} в 99% случаев. nil только для явного отсутствия.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🤔1
🎄 С Новым годом, гоферы!

time.Sleep(10 * 24 * time.Hour) // заслуженный отдых

fmt.Println("🎉 С Новым годом!")


Желаем быстрых билдов, понятных ошибок и defer только для закрытия ресурсов, а не дедлайнов.

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
145🎉15👍4
🎆 Праздники с лучшим контентом 2025

Новый год пришёл, но контент не останавливается. Все праздники публикуем топ посты прошлого года — те самые, что сохраняли в закладки.

➡️ Готовьтесь к ежедневным порциям профита с хэштегом #лучшее_из_библиотеки_2025

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🎊 Как устроена новая мапа

Весной мы рассказывали о Swiss Table — новом алгоритме хеш-таблиц в Go 1.24. Тогда прошлись по верхам, теперь копнём глубже: как именно устроена map под капотом.

Раньше мапа хранила данные в бакетах со связными списками при переполнении. Теперь — массив групп, каждая содержит 8 слотов для пар ключ-значение и 64-битное контрольное слово.

Каждый байт контрольного слова хранит статус слота: пусто / занято / удалено и 7 бит от хеша ключа.

Как работает поиск

Хеш ключа разбивается на две части:
• h1 (старшие 57 бит) — определяет группу
• h2 (младшие 7 бит) — «отпечаток» для быстрого сравнения

Вместо последовательного сравнения 8 ключей Go сравнивает h2 сразу со всеми 8 байтами контрольного слова за одну SIMD-операцию. Не совпало — слот пропускается. Совпало — проверяется полный ключ.

Инкрементальный рост

Abseil (C++) перестраивает всю таблицу разом. Go так не может — это убьёт latency. Поэтому мапа разбита на независимые таблицы по 1024 записи максимум. При переполнении растёт только одна таблица, остальные не трогаются.

Итог:

Память: −15–25% за счёт компактного хранения
Скорость: до +60% на микробенчмарках
Load factor выше — меньше перестроений

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍174🤔2
👨‍💻 Ваш идеальный инструмент для разработки

В середине года мы спрашивали у вас про вашу любимую IDE. Повторим опрос? Тогда лагеря разделились почти поровну между VS Code и GoLand.

Поставьте эмоцию соответствующую вашей IDE:
👍 — VS Code
🤩 — GoLand
👾 — Другие IDE

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩155👍144👾57🥱2
🥇 Золотая лихорадка закончилась

2025-й стал годом «скучной стабильности» в айти. Компании не росли — выживали: резали бюджеты, оптимизировали команды, затягивали найм.

2383 отклика на 1 вакансию.
−20% позиций за год.
30-50% сокращений в e-commerce.

➡️ Полный разбор рынка

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
😢13😁2👾2
🗺 Карта взаимодействия приложения

Когда проект на Go становится больше пары пакетов, держать в голове связи между функциями — задача неблагодарная.

go-callvis решает эту проблему: он строит интерактивную диаграмму вызовов прямо из кода.

Как установить:
go install github.com/ofabry/go-callvis@latest


Главная команда:
go-callvis ./...


Это запустит HTTP-сервер по адресу https://localhost:7878/, где можно интерактивно просматривать граф вызовов.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤‍🔥3👏2
⚙️ Watermill для событий

Весной мы рассказывали про Watermill, фреймворк для Go, который упрощает обработку сообщений. Поддерживает Kafka, RabbitMQ, NATS и другие брокеры.

Фреймворк дает маршрутизацию по темам, гибкую настройку под микросервисы. Встроены метрики и логи, чтобы следить за потоком. От простых очередей до распределенных систем работает стабильно.

Код простой: роутер подключаете, хендлер с subscriber и publisher. Сообщение приходит, обрабатываете, дальше шлёте. Идеально для заказов в e-commerce или аналитики.

Пример:
r := router.NewRouter(router.Config{}, logger)
r.AddHandler(
"order_handler",
"orders",
kafkaSubscriber,
"processed_orders",
rabbitPublisher,
func(msg *message.Message) ([]*message.Message, error) {
// Логика обработки сообщения
return []*message.Message{msg}, nil
},
)
r.Run()


➡️ Дополняем пост ссылкой на инструмент

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔42
Высокопроизводительные AI-агенты: пора строить экосистемы

Go идеально подходит для инфраструктуры ИИ, но чтобы управлять логикой моделей, нужны паттерны автономности. В 2026-м недостаточно уметь дёргать OpenAI API.

На курсе «Разработка AI-агентов» мы учим строить автономные системы:

— использование паттерна ReAct для принятия решений агентом;
— оркестрация в n8n для управления сложными флоу;
— внедрение протокола MCP для обмена данными;
— создание быстрых RAG-систем для работы с контекстом.

Дипломный проект — автономная группа агентов, решающая задачи анализа рынка или автоматизации саппорта.

❄️ До 12 января действует акция «3 в 1»: забирай курс по ИИ-агентам и 2 дополнительных курса в подарок.

Ворваться в AI-разработку
😁1
🧱 7 архитектурных паттернов, которые должен знать каждый программист

Архитектурные паттерны — это фундаментальные подходы, помогающие создавать масштабируемые, устойчивые и поддерживаемые решения.

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

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4👏1
🤩 Это скорее всего главный мем 2025 года

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
😁334💯2