🧪 Go synctest — решение для нестабильных (flaky) тестов
Flaky-тесты в многопоточном Go-коде — боль. Новый экспериментальный инструмент
📌 Что это такое:
•
• все goroutine исполняются детерминированно
• нет зависимости от планировщика и нагрузки ОС
🔧 Пример:
⏱ Даже с
⚙️ Преимущества:
✅ Устранение race-условий при тестировании
✅ Нет задержек —
✅ Можно тестировать поведение с точностью до микросекунды
✅ Подходит для любых
🚫 Ограничения:
• Пока экспериментально: нужно запускать с
• Не подходит для ввода-вывода, работы с сетью или временем вне "bubble"
📖 Подробнее:
https://victoriametrics.com/blog/go-synctest/
@golang_google
Flaky-тесты в многопоточном Go-коде — боль. Новый экспериментальный инструмент
synctest
из Go 1.24 решает эту проблему с помощью синтетического времени и контроля исполнения goroutine.📌 Что это такое:
synctest
— специальный режим, запускающий тесты в изолированной "песочнице", где:•
time.Sleep
не ждёт реального времени • все goroutine исполняются детерминированно
• нет зависимости от планировщика и нагрузки ОС
🔧 Пример:
import "testing/synctest"
func TestSharedValue(t *testing.T) {
synctest.Run(func() {
var shared atomic.Int64
go func() {
shared.Store(1)
time.Sleep(1 * time.Microsecond)
shared.Store(2)
}()
time.Sleep(5 * time.Microsecond)
if shared.Load() != 2 {
t.Errorf("shared = %d, want 2", shared.Load())
}
})
}
⏱ Даже с
Sleep
, результат всегда стабилен. Без synctest
такой тест может иногда проваливаться.⚙️ Преимущества:
✅ Устранение race-условий при тестировании
✅ Нет задержек —
Sleep
срабатывает мгновенно ✅ Можно тестировать поведение с точностью до микросекунды
✅ Подходит для любых
atomic
, mutex
, select
, time.After
и др.🚫 Ограничения:
• Пока экспериментально: нужно запускать с
GOEXPERIMENT=synctest
• Не подходит для ввода-вывода, работы с сетью или временем вне "bubble"
📖 Подробнее:
https://victoriametrics.com/blog/go-synctest/
@golang_google
📦 Как оптимизировать struct в Go: выравнивание, паддинг и порядок полей
Когда ты работаешь с Go и структурой данных (`struct`), порядок полей — это не просто эстетика. Это напрямую влияет на:
• размер занимаемой памяти
• эффективность использования кэша
• и в итоге — на производительность твоей программы.
Автор [buarki на DEV.to](https://dev.to/buarki/optimizing-struct-layout-and-padding-in-practice-23p1) показывает, как правильно выстраивать поля в структурах, чтобы избежать лишнего паддинга и сделать struct более компактным и быстрым.
🔍 Что такое padding?
Go автоматически выравнивает поля структур по их размеру. Например:
Кажется, что struct должен занимать 10 байт. Но из-за выравнивания Go вставит паддинг, и итоговый размер окажется 24 байта.
✅ Как это исправить?
Меняем порядок полей:
Теперь структура занимает 16 байт, а не 24 — и всё благодаря грамотному размещению полей.
📌 Рекомендации:
• Сортируй поля от самых крупных к самым мелким
• Группируй однотипные поля
• Избегай перемешивания
• Используй визуализацию (например, viztruct) для анализа struct'ов
• Проверяй размер struct через
🎯 Это особенно важно при:
• массовом использовании struct в массивах и слайсах
• передаче struct между потоками
• работе с бинарными протоколами или mmap
📖 Подробнее с примерами: https://dev.to/buarki/optimizing-struct-layout-and-padding-in-practice-23p1
Когда ты работаешь с Go и структурой данных (`struct`), порядок полей — это не просто эстетика. Это напрямую влияет на:
• размер занимаемой памяти
• эффективность использования кэша
• и в итоге — на производительность твоей программы.
Автор [buarki на DEV.to](https://dev.to/buarki/optimizing-struct-layout-and-padding-in-practice-23p1) показывает, как правильно выстраивать поля в структурах, чтобы избежать лишнего паддинга и сделать struct более компактным и быстрым.
🔍 Что такое padding?
Go автоматически выравнивает поля структур по их размеру. Например:
type Bad struct {
a bool // 1 байт
b int64 // 8 байт
c bool // 1 байт
}
Кажется, что struct должен занимать 10 байт. Но из-за выравнивания Go вставит паддинг, и итоговый размер окажется 24 байта.
✅ Как это исправить?
Меняем порядок полей:
type Good struct {
b int64 // 8 байт
a bool // 1 байт
c bool // 1 байт
}
Теперь структура занимает 16 байт, а не 24 — и всё благодаря грамотному размещению полей.
📌 Рекомендации:
• Сортируй поля от самых крупных к самым мелким
• Группируй однотипные поля
• Избегай перемешивания
bool`/`byte
с int64`/`float64
• Используй визуализацию (например, viztruct) для анализа struct'ов
• Проверяй размер struct через
unsafe.Sizeof()
🎯 Это особенно важно при:
• массовом использовании struct в массивах и слайсах
• передаче struct между потоками
• работе с бинарными протоколами или mmap
📖 Подробнее с примерами: https://dev.to/buarki/optimizing-struct-layout-and-padding-in-practice-23p1
В статье рассматривается, как реализовать механизм "сердцебиения" (heartbeat) для горутин в Go, чтобы отслеживать их активность и своевременно обнаруживать сбои.
🔍 Зачем нужны heartbeats?
Иногда горутина может завершиться неожиданно без явных ошибок или логов, что затрудняет диагностику. Механизм heartbeats позволяет периодически отправлять сигналы о том, что горутина все еще работает, даже если она ожидает задания. Это особенно полезно для:
Мониторинга состояния фоновых задач
Обнаружения и перезапуска "зависших" горутин
Улучшения надежности и отказоустойчивости систем
🛠 Как это реализовать?
Используя time.Ticker, можно настроить горутину на периодическую отправку сигналов активности через канал. Пример функции dowork:
func dowork(done <-chan interface{}, pulseInterval time.Duration) (<-chan interface{}, <-chan struct{}) {
heartbeater := make(chan interface{})
result := make(chan struct{})
go func() {
defer close(result)
defer close(heartbeater)
pulse := time.NewTicker(pulseInterval)
workGen := time.NewTicker(3 * pulseInterval)
defer pulse.Stop()
defer workGen.Stop()
sendPulse := func() {
select {
case heartbeater <- struct{}{}:
default:
// если никто не слушает, пропускаем
}
}
sendResult := func(res struct{}) {
for {
select {
case <-done:
return
case <-pulse.C:
sendPulse()
case result <- res:
return
}
}
}
for {
select {
case <-done:
return
case <-pulse.C:
sendPulse()
case <-workGen.C:
sendResult(struct{}{})
}
}
}()
return heartbeater, result
}
🧪 А в main можно следить за этим:
for {
select {
case <-heartbeat:
log.Println("Still alive")
case <-time.After(5 * time.Second):
log.Println("Timeout! Goroutine might be dead")
}
}
}()
🎯 Зачем это нужно:
• Обнаружение зависших/умерших горутин
• Реализация watchdog'ов
• Надежность фоновых процессов в проде
🔗 Статья: https://blog.devgenius.io/how-to-build-heartbeats-in-go-let-your-goroutines-say-still-breathing-d047253d5c78
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🗃️ Stoolap — лёгкая и быстрая SQL-база данных на чистом Go без зависимостей
Stoolap — это современный HTAP-движок (Hybrid Transactional/Analytical Processing), сочетающий OLTP и OLAP в одном ядре. Подходит как для транзакционных задач, так и для аналитики.
🚀 Возможности:
• Полностью написан на Go — никаких внешних зависимостей
• ACID-транзакции через MVCC
• Колонковое хранение с SIMD-ускорением
• Поддержка SQL: JOIN, агрегаты, оконные функции
• Встроенный тип JSON
• Поддержка
• CLI-режим и in-memory база
📦 Установка:
🔥 Быстрый старт (CLI):
📎 Репозиторий: https://github.com/stoolap/stoolap
🌐 Сайт: https://stoolap.io
@golang_google
Stoolap — это современный HTAP-движок (Hybrid Transactional/Analytical Processing), сочетающий OLTP и OLAP в одном ядре. Подходит как для транзакционных задач, так и для аналитики.
🚀 Возможности:
• Полностью написан на Go — никаких внешних зависимостей
• ACID-транзакции через MVCC
• Колонковое хранение с SIMD-ускорением
• Поддержка SQL: JOIN, агрегаты, оконные функции
• Встроенный тип JSON
• Поддержка
database/sql
и интеграция с GORM • CLI-режим и in-memory база
📦 Установка:
go get github.com/stoolap/stoolap
🔥 Быстрый старт (CLI):
stoolap -db memory://
📎 Репозиторий: https://github.com/stoolap/stoolap
🌐 Сайт: https://stoolap.io
@golang_google
🏗️ Как строить масштабируемые multi-tenant приложения на Go — опыт Atlas Cloud
В этой статье команда Atlas делится практическими стратегиями масштабирования multi-tenant приложений на Go, основанными на опыте разработки бэкенда для Atlas Cloud — части их коммерческого продукта.
🔍 Что такое multi-tenancy?
Multi-tenancy — это архитектура, при которой один инстанс системы обслуживает сразу нескольких клиентов (арендаторов).
📦 Но тут важен нюанс: клиенты ожидают, что сервис будет работать так, как будто он только для них — без потерь в скорости, надёжности и безопасности.
Именно поэтому вы *молча* обещаете каждому клиенту две вещи:
1. Изоляция данных — никакой арендатор не должен иметь доступ к чужим данным
2. Стабильная производительность — нагрузка одного арендатора не должна замедлять других
🛡️ Стратегия №1 — Физическая изоляция (Dedicated Instances)
Самый прямой способ выполнить эти обещания — запуск отдельного инстанса приложения на каждого арендатора.
Что это даёт:
✅ Данные арендаторов хранятся в отдельных БД (или даже в разных VPC/облаках)
✅ Полная изоляция ресурсов — никто не шумит и не мешает
✅ Безопасность на уровне инфраструктуры
💸 Но у такого подхода есть и минусы:
• Сложность в управлении: сотни и тысячи развёрнутых инстансов, каждая со своей БД и конфигурацией
• Стоимость: каждый инстанс потребляет ресурсы, и это дорого
• Проблемы масштабирования: каждый новый клиент = новый деплой
• Сложности с наблюдаемостью: логи, метрики и дебаг — теперь распределены по куче окружений
В статье авторы разбирают гибридные подходы, модели хранения, обработку миграций и советы по коду.
🔗 Продолжение читай тут:
https://atlasgo.io/blog/2025/05/26/gophercon-scalable-multi-tenant-apps-in-go
@golang_google
В этой статье команда Atlas делится практическими стратегиями масштабирования multi-tenant приложений на Go, основанными на опыте разработки бэкенда для Atlas Cloud — части их коммерческого продукта.
🔍 Что такое multi-tenancy?
Multi-tenancy — это архитектура, при которой один инстанс системы обслуживает сразу нескольких клиентов (арендаторов).
📦 Но тут важен нюанс: клиенты ожидают, что сервис будет работать так, как будто он только для них — без потерь в скорости, надёжности и безопасности.
Именно поэтому вы *молча* обещаете каждому клиенту две вещи:
1. Изоляция данных — никакой арендатор не должен иметь доступ к чужим данным
2. Стабильная производительность — нагрузка одного арендатора не должна замедлять других
🛡️ Стратегия №1 — Физическая изоляция (Dedicated Instances)
Самый прямой способ выполнить эти обещания — запуск отдельного инстанса приложения на каждого арендатора.
Что это даёт:
✅ Данные арендаторов хранятся в отдельных БД (или даже в разных VPC/облаках)
✅ Полная изоляция ресурсов — никто не шумит и не мешает
✅ Безопасность на уровне инфраструктуры
💸 Но у такого подхода есть и минусы:
• Сложность в управлении: сотни и тысячи развёрнутых инстансов, каждая со своей БД и конфигурацией
• Стоимость: каждый инстанс потребляет ресурсы, и это дорого
• Проблемы масштабирования: каждый новый клиент = новый деплой
• Сложности с наблюдаемостью: логи, метрики и дебаг — теперь распределены по куче окружений
В статье авторы разбирают гибридные подходы, модели хранения, обработку миграций и советы по коду.
🔗 Продолжение читай тут:
https://atlasgo.io/blog/2025/05/26/gophercon-scalable-multi-tenant-apps-in-go
@golang_google
📦 godump — удобный Go-инструмент для дампа объектов в читаемом виде
Инструмент помогает красиво и наглядно выводить внутреннее содержимое структур, карт, срезов и других объектов.
🛠️ Что умеет godump:
• Красиво форматирует вложенные структуры и срезы
• Поддерживает карты, интерфейсы, указатели, циклы
• Вывод в цвете (ANSI) и с отступами
• Умеет обходить циклические ссылки
• Простой API:
💡 Отлично подходит для:
- Отладки и логирования сложных структур
- Инспекции JSON-данных после анмаршалинга
- Быстрой визуальной проверки содержимого без IDE
🔍 Пример использования:
🚀 Установка:
🔗 https://github.com/goforj/godump
Если
@golang_google
godump
— это мощная альтернатива fmt.Printf("%#v")
и spew.Dump
для Go-разработчиков. Инструмент помогает красиво и наглядно выводить внутреннее содержимое структур, карт, срезов и других объектов.
🛠️ Что умеет godump:
• Красиво форматирует вложенные структуры и срезы
• Поддерживает карты, интерфейсы, указатели, циклы
• Вывод в цвете (ANSI) и с отступами
• Умеет обходить циклические ссылки
• Простой API:
godump.Dump(anyObject)
💡 Отлично подходит для:
- Отладки и логирования сложных структур
- Инспекции JSON-данных после анмаршалинга
- Быстрой визуальной проверки содержимого без IDE
🔍 Пример использования:
import "github.com/goforj/godump"
type User struct {
Name string
Tags []string
}
func main() {
user := User{"Alice", []string{"dev", "golang"}}
godump.Dump(user)
}
🚀 Установка:
go get github.com/goforj/godump
🔗 https://github.com/goforj/godump
Если
fmt.Println
уже не справляется — попробуй godump
. Красиво. Быстро. Глубоко.@golang_google
Это современный, сверхпроизводительный, специально разработанный API-шлюз с открытым исходным кодом.
Tyk Operator предоставляет возможности полного жизненного цикла управления API в Kubernetes. Вы можете настраивать Ingress, API, политики безопасности, аутентификацию, авторизацию, посредничество, используя лучшие практики GitOps с помощью пользовательских ресурсов и примитивов, присущих Kubernetes.
📌 Github
#golang #devops #девопс
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Тысячи бессонных ночей сотен ресёрчеров и ML-инженеров дали миру сначала большие языковые модели, а потом MCP-протокол - открытый стандарт, который связал эти модели и дал возможность подключаться к приложениям, системам и API.
Они мечтали о будущем, где ИИ будет решать климатические кризисы, расшифровывать геном, найдет решение глобальных проблем или, в крайнем случае, будет писать вам стихи и поэмы.
Как это используют люди? Пилят действительно важные и нужные интеграции.
Проект поддерживает Ollama, подключение к экосистеме управления умным домом HomeAssistant MCP и написан на Go.
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Проект, который превращает терминал в многопоточную машину для работы с LLM-агентами: Claude, GPT, Aider, Codex и другими.
🧠 Что делает Uzi:
• Запускает несколько агентов параллельно
• Каждому агенту — свой
git worktree
, tmux
и порт • Можно задавать общую задачу, а агенты предложат решения независимо
• Позволяет наблюдать за прогрессом, подтверждать или отклонять шаги
• Упрощает слияние финальных изменений — без ручной рутины
🛠 Пример:
uzi prompt --agents claude:2,gpt4:1 "Добавь в проект GraphQL API и авторизацию"
Затем:
-
uzi auto
— агентам можно доверить автоматические действия -
uzi broadcast "Обнови документацию"
— отправить команду всем -
uzi checkpoint
— сохранить и закоммитить результат🧪 Идеально подходит для:
— Быстрой генерации MVP
— Прототипирования фичей сразу в нескольких вариантах
— Параллельной работы с кодовыми ассистентами
— Демонстраций, где хочется "показать мощь LLM сразу в действии"
📦 Установка:
go install github.com/devflowinc/uzi@latest
📌 Репозиторий
#AI #DevTools #CLI #LLM #CodeGeneration #OpenSource
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Доступен первый альфа-выпуск языка программирования Gauntlet, надстройки над языком Go, решающей некоторые архитектурные проблемы и добавляющей дополнительную функциональность.
Программы на языке Gauntlet поддерживают все возможности языка Go, транслируются в представление на языке Go и интегрируются с существующей экосистемой Go без необходимости задействования обвязок (binding).
Развиваемый проектом инструментарий написан на языке F# и распространяется пол лицензией GPLv3. Для работы с кодом предоставляется дополнение к редактору VSCode.
Решаемые в Gauntlet проблемы:
• Назойливый вывод ошибок, связанных с неиспользуемыми переменными (Gauntlet добавляет для всех неиспользуемых переменных заглушки вида "_ = a").
• Раздутый код для обработки ошибок. В Gauntlet вместо условных блоков вида "if err != nil" используются однострочные выражения "try-with".
• Назойливый способ импорта и экспорта (например, в Go необходимо, чтобы экспортируемые имена начинались на заглавную букву).
• Отсутствие тенарного оператора. В Gauntlet можно использовать выражения вида 'let properWord = @String len(lines) > 1 ? "lines" : "line"'.
•Отсутствие синтаксиса switch-case.
• Усложнённые циклы "for". В Gauntlet можно писать "for let _, c in "Hello" {" вместо "for _, c := range "Hello" {".
• Необычный оператор присваивания (":=" для одновременного объявления и инициализации переменных; "=" для изменения значения уже объявленных переменных).
• Невозможность вызова функций по цепочке (в Gauntlet поддерживается вызов вида 'let trimmedLines = fileContentStrVersion => strings.trimSpace(_) => strings.split(_, "\n")'.
Расширенные возможности Gauntlet:
• Синтаксис "when-is" похожий на switch.case, но манипулирующий выражениями.
• Поддержка pipe-каналов, позволяющих по цепочке пропускать значение через несколько выражений или функций. например "10 => add(_, 10) => add(_, 30) => divide(_, 2)".
• Выражения "try .. with" и "force .. with".
• Выражение "wrapper" для создания псевдонимов типов (например. "wrapper Int Dollars").
#Gauntlet #golang
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
📡 apimocker — простой мокер REST API без бэкенда
apimocker — это легкий TUI-инструмент на Go, который поднимает фейковый API из YAML/JSON за секунды. Идеален для фронтенда, тестов и прототипов.
🛠 Что умеет:
• Динамичные JSON-ответы с шаблонами (
• Задержки, ошибки с вероятностью
• Отдача файлов (изображений и др.)
• Логирование (plain/json)
• TUI-интерфейс с активными маршрутами
💡 Подходит для:
• Быстрого мокинга
• Демонстраций и тестов
• Изоляции от реального API
🚀 Установка:
🔗 https://github.com/Hanashiko/apimocker
Нужен API-сервер без сервера? Используй apimocker.
@golang_google
apimocker — это легкий TUI-инструмент на Go, который поднимает фейковый API из YAML/JSON за секунды. Идеален для фронтенда, тестов и прототипов.
🛠 Что умеет:
• Динамичные JSON-ответы с шаблонами (
"id": "uuid"
, "email": "email"
)• Задержки, ошибки с вероятностью
• Отдача файлов (изображений и др.)
• Логирование (plain/json)
• TUI-интерфейс с активными маршрутами
💡 Подходит для:
• Быстрого мокинга
• Демонстраций и тестов
• Изоляции от реального API
🚀 Установка:
yay -S apimocker # Arch
# или:
git clone https://github.com/Hanashiko/apimocker.git
cd apimocker && go build -o apimocker main.go
sudo mv apimocker /usr/bin/
🔗 https://github.com/Hanashiko/apimocker
Нужен API-сервер без сервера? Используй apimocker.
@golang_google
📞 Diago — библиотека для создания VoIP-приложений на Go
Diago (сокращение от Dialog + Go) — это open-source библиотека для разработки VoIP-решений на языке Go.
VoIP (Voice over IP) — это технология, которая позволяет передавать голосовые вызовы через интернет или любую другую IP-сеть, вместо использования традиционной телефонной связи.
Она построена поверх оптимизированной библиотеки SIPgo и предназначена для быстрого и удобного создания тестируемых VoIP-приложений.
🔧 Основные возможности:
- SIP-сессии: Поддержка клиентских и серверных SIP-сессий, включая регистрацию и аутентификацию.
- Обработка медиа: Воспроизведение и запись аудио, поддержка DTMF, управление RTP/RTCP.
- Поддержка кодеков: Включая Opus, что делает библиотеку совместимой с современными стандартами аудио.
- Примеры использования: В репозитории представлены примеры, такие как эхо-тест и регистрация SIP-агента.
🚀 Быстрый старт:
Пример:
🧪 Дополнительные инструменты:
Gophone: CLI SIP-телефон, построенный на Diago, для тестирования и отладки VoIP-сервисов.
📚 Подробнее:
Репозиторий: github.com/emiago/diago
Diago (сокращение от Dialog + Go) — это open-source библиотека для разработки VoIP-решений на языке Go.
VoIP (Voice over IP) — это технология, которая позволяет передавать голосовые вызовы через интернет или любую другую IP-сеть, вместо использования традиционной телефонной связи.
Она построена поверх оптимизированной библиотеки SIPgo и предназначена для быстрого и удобного создания тестируемых VoIP-приложений.
🔧 Основные возможности:
- SIP-сессии: Поддержка клиентских и серверных SIP-сессий, включая регистрацию и аутентификацию.
- Обработка медиа: Воспроизведение и запись аудио, поддержка DTMF, управление RTP/RTCP.
- Поддержка кодеков: Включая Opus, что делает библиотеку совместимой с современными стандартами аудио.
- Примеры использования: В репозитории представлены примеры, такие как эхо-тест и регистрация SIP-агента.
🚀 Быстрый старт:
Пример:
ua, _ := sipgo.NewUA()
dg := diago.NewDiago(ua)
dg.Serve(ctx, func(inDialog *diago.DialogServerSession) {
inDialog.Trying()
inDialog.Answer()
playfile, err := os.Open("demo-echotest.wav")
if err != nil {
fmt.Println("Failed to open file", err)
return
}
defer playfile.Close()
pb, _ := inDialog.PlaybackCreate()
if err := pb.Play(playfile, "audio/wav"); err != nil {
fmt.Println("Playing failed", err)
}
})
🧪 Дополнительные инструменты:
Gophone: CLI SIP-телефон, построенный на Diago, для тестирования и отладки VoIP-сервисов.
📚 Подробнее:
Репозиторий: github.com/emiago/diago
Redis и Valkey – изучите секреты самых популярных open source key-value СУБД
В высоко-нагруженных сервисах Redis — не просто кэш, а важная подсистема, на которой строится значимая часть бизнес-логики. От его стабильности, масштабируемости и отказоустойчивости зависит производительность всего сервиса. Valkey - это современный производительный форк Redis с открытым исходным кодом, поддерживаемый сообществом и рядом крупных компаний. Valkey набирает популярность, поддержан крупными облачными провайдерами, и вполне возможно потеснит или вовсе заменит Redis со временем. Наш курс — для тех, кто хочет держать свой стэк и знания актуальными и глубоко разбираться, как устроен Redis и Valkey.
🌐 В программе курса:
🤩 Как эффективно использовать базовые и продвинутые структуры данных: HyperLogLog, Bitmaps и Bisields, Streams, Geospatial-индексы, Bloom Filters
🤩 Как проектировать in-memory системы, которые не разваливаются под нагрузкой, что влияет на отказоустойчивость и как её добиться
🤩 Как работает репликация и кластеризация на практике (режимы Sentinel и Cluster)
🤩 Как встроить Redis/Valkey в реальный прод с учётом безопасности, интеграций и современных практик мониторинга.
🥸 Кто мы: R&D-центр Devhands. Автор курса — Константин Ратвин — преподаватель МФТИ на кафедре БИТ (совместно со СберТех), эксперт по распределённым системам и банковским ИТ, автор курсов по СУБД и инфраструктуре, спикер HighLoad++ и PGConf.
🗓 Старт курса: 9 июня, 6 недель обучения.
Изучить программу и записаться можно здесь.
Ждем вас!
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzqxNnFKA
В высоко-нагруженных сервисах Redis — не просто кэш, а важная подсистема, на которой строится значимая часть бизнес-логики. От его стабильности, масштабируемости и отказоустойчивости зависит производительность всего сервиса. Valkey - это современный производительный форк Redis с открытым исходным кодом, поддерживаемый сообществом и рядом крупных компаний. Valkey набирает популярность, поддержан крупными облачными провайдерами, и вполне возможно потеснит или вовсе заменит Redis со временем. Наш курс — для тех, кто хочет держать свой стэк и знания актуальными и глубоко разбираться, как устроен Redis и Valkey.
Изучить программу и записаться можно здесь.
Ждем вас!
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzqxNnFKA
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Monstera — фреймворк для Go, который избавит тебя от забот о масштабировании
Пишешь приложение на Go, где нужно хранить состояние (state)?
Обычно это боль: базы, кеши, отказоустойчивость, репликация...
Monstera всё упрощает:
✅ Пиши обычный Go-код со всеми данными в памяти или на диске
✅ Не думай про кластеры, скейлинг, доступность — всё уже встроено
✅ Подходит для real-time приложений, распределённых систем и сервисов с постоянным состоянием
💡 Просто подключаешь Monstera — и сразу получаешь стабильную, масштабируемую систему.
🔗 Попробовать
#golang
Пишешь приложение на Go, где нужно хранить состояние (state)?
Обычно это боль: базы, кеши, отказоустойчивость, репликация...
Monstera всё упрощает:
✅ Пиши обычный Go-код со всеми данными в памяти или на диске
✅ Не думай про кластеры, скейлинг, доступность — всё уже встроено
✅ Подходит для real-time приложений, распределённых систем и сервисов с постоянным состоянием
💡 Просто подключаешь Monstera — и сразу получаешь стабильную, масштабируемую систему.
go get -u github.com/evrblk/monstera@latest
🔗 Попробовать
#golang
🎆 Релиз Go 1.24.4 и 1.23.10!
🔐 Безопасность:
Обновления включают исправления для критических уязвимостей:
• CVE-2025-4673 (в `net/http`)
• CVE-2025-0913 (в `os`)
• CVE-2025-22874 (в `crypto/x509`)
📢 Анонс: https://groups.google.com/g/golang-announce/c/ufZ8WpEsA3A/m/XDxq7uidAgAJ
📦 Скачать: https://go.dev/dl/#go1.24.4
#golang #security #update
@Golang_google
🔐 Безопасность:
Обновления включают исправления для критических уязвимостей:
• CVE-2025-4673 (в `net/http`)
• CVE-2025-0913 (в `os`)
• CVE-2025-22874 (в `crypto/x509`)
📢 Анонс: https://groups.google.com/g/golang-announce/c/ufZ8WpEsA3A/m/XDxq7uidAgAJ
📦 Скачать: https://go.dev/dl/#go1.24.4
#golang #security #update
@Golang_google
This media is not supported in your browser
VIEW IN TELEGRAM
⚙️ GOscade - минималистичная библиотека для автоматического запуска, остановки и координации зависимостей в Go
Когда в проекте десятки компонентов, требующих запуска, важно соблюдать правильный порядок, проверять готовность и корректно останавливать при критических ошибках или
✅ Автоматически определяет зависимости между компонентами
✅ Запускает их по топологическому порядку, параллельно
✅ Следит за
✅ Делает graceful shutdown в обратном порядке
Всё, что нужно - реализовать интерфейс и зарегистрировать компонент:
📦 Репозиторий: https://github.com/ognick/goscade
Когда в проекте десятки компонентов, требующих запуска, важно соблюдать правильный порядок, проверять готовность и корректно останавливать при критических ошибках или
SIGTERM
.goscade
делает это за вас:✅ Автоматически определяет зависимости между компонентами
✅ Запускает их по топологическому порядку, параллельно
✅ Следит за
readiness
, обрабатывает ошибки и каскадное завершение ✅ Делает graceful shutdown в обратном порядке
Всё, что нужно - реализовать интерфейс и зарегистрировать компонент:
type Component interface {
Run(ctx context.Context, readinessProbe func(error)) error
}
📦 Репозиторий: https://github.com/ognick/goscade
📦 Outbox — простая реализация outbox-паттерна на Go для микросервисов
Если твои сервисы пишут в базу и одновременно публикуют события в Kafka, RabbitMQ или другие брокеры — знай: без outbox-паттерна ты рискуешь потерять данные.
🔧
🧠 Что она делает:
1. Сохраняет событие в таблицу
2. Отдельный воркер читает сообщения и отправляет их в брокер
3. После успешной доставки — сообщение помечается как доставленное
💡 Особенности:
- Поддержка PostgreSQL
- Готовые адаптеры для Kafka и RabbitMQ
- Возможность использовать свой брокер (реализуй интерфейс)
- Поддержка сериализации / форматирования событий
- Использует
🧩 Подходит для:
- надёжной синхронизации БД ↔ событий
- микросервисов, где важна консистентность
- систем, где нужна повторная доставка без дублей
🔥 Отличный выбор, если ты хочешь atomic-публикацию событий без тяжёлых фреймворков и сервисов.
#Go #OutboxPattern #Kafka #RabbitMQ #Microservices #EventDriven #PostgreSQL
🔗 https://github.com/oagudo/outbox
Если твои сервисы пишут в базу и одновременно публикуют события в Kafka, RabbitMQ или другие брокеры — знай: без outbox-паттерна ты рискуешь потерять данные.
🔧
Outbox
— это лёгкая и удобная библиотека на Go, которая помогает сделать доставку сообщений атомарной и надёжной, без лишней сложности.🧠 Что она делает:
1. Сохраняет событие в таблицу
outbox
в рамках транзакции2. Отдельный воркер читает сообщения и отправляет их в брокер
3. После успешной доставки — сообщение помечается как доставленное
💡 Особенности:
- Поддержка PostgreSQL
- Готовые адаптеры для Kafka и RabbitMQ
- Возможность использовать свой брокер (реализуй интерфейс)
- Поддержка сериализации / форматирования событий
- Использует
sqlx
и стандартную database/sql
🧩 Подходит для:
- надёжной синхронизации БД ↔ событий
- микросервисов, где важна консистентность
- систем, где нужна повторная доставка без дублей
🔥 Отличный выбор, если ты хочешь atomic-публикацию событий без тяжёлых фреймворков и сервисов.
#Go #OutboxPattern #Kafka #RabbitMQ #Microservices #EventDriven #PostgreSQL
🔗 https://github.com/oagudo/outbox
🚀 Automi — потоковая обработка данных на Go с поддержкой дженериков
Automi — это библиотека для построения стриминговых data pipeline’ов на Go. Теперь с полной поддержкой дженериков, что даёт массу преимуществ:
✅ Типобезопасность — ошибки ловятся во время компиляции
✅ Меньше шаблонного кода — без interface{} и кастов
✅ Быстрее выполнение — нет runtime-ассертов
✅ Удобство разработки — автодополнение и понятные ошибки в IDE
🧠 Как это работает:
Данные проходят через цепочку операций:
Каждый элемент обрабатывается по ходу, не загружая всё в память.
📌 Подходит для:
• Обработки больших объёмов данных
• ETL/streaming задач
• Писать понятные, типизированные пайплайны на Go
▪ Github
@golang_google
Automi — это библиотека для построения стриминговых data pipeline’ов на Go. Теперь с полной поддержкой дженериков, что даёт массу преимуществ:
✅ Типобезопасность — ошибки ловятся во время компиляции
✅ Меньше шаблонного кода — без interface{} и кастов
✅ Быстрее выполнение — нет runtime-ассертов
✅ Удобство разработки — автодополнение и понятные ошибки в IDE
🧠 Как это работает:
Данные проходят через цепочку операций:
Источник → Фильтр → Map → Sink
Каждый элемент обрабатывается по ходу, не загружая всё в память.
📌 Подходит для:
• Обработки больших объёмов данных
• ETL/streaming задач
• Писать понятные, типизированные пайплайны на Go
▪ Github
@golang_google