⚙️ Как правильно управлять конфигурацией в Go-приложении?
Алекс Эдвардс выпустил чёткий гайд по работе с настройками в веб-приложениях на Go:
• флаги командной строки
• переменные окружения
• конфиг-файлы (JSON, YAML)
• разделение по средам: dev, staging, prod
• и главное — как всё это объединить в чистую архитектуру
Без лишнего кода, с примерами и практикой. Подойдёт как для новичков, так и для тех, кто хочет структурировать свой проект правильно.
📖 Читать статью:
https://alexedwards.net/blog/how-to-manage-configuration-settings-in-go-web-applications
Алекс Эдвардс выпустил чёткий гайд по работе с настройками в веб-приложениях на Go:
• флаги командной строки
• переменные окружения
• конфиг-файлы (JSON, YAML)
• разделение по средам: dev, staging, prod
• и главное — как всё это объединить в чистую архитектуру
Без лишнего кода, с примерами и практикой. Подойдёт как для новичков, так и для тех, кто хочет структурировать свой проект правильно.
📖 Читать статью:
https://alexedwards.net/blog/how-to-manage-configuration-settings-in-go-web-applications
❤4🤔3👍2
🚦 Рейтлимитинг в Go: Token Bucket и Leaky Bucket — просто и понятно
📌 Хочешь ограничить количество запросов в секунду к API или ресурсу? В статье [на dev.to](https://dev.to/jones_charles_ad50858dbc0/implementing-rate-limiters-in-go-token-bucket-and-leaky-bucket-made-simple-5162) показано, как реализовать два самых популярных алгоритма рейтлимитинга:
🪙 Token Bucket
- Каждому клиенту выделяется "ведро" с токенами.
- Запросы забирают по 1 токену.
- Токены добавляются с фиксированной скоростью.
- Если токенов нет — запрос блокируется или отклоняется.
Пример на Go:
💧 Leaky Bucket
- Все запросы ставятся в очередь (как в воронке).
- Обработка идёт с фиксированной скоростью, капля за каплей.
- Если очередь переполнена — лишние запросы отбрасываются.
Пример на Go:
📊 Выбор зависит от задачи:
- Token Bucket — гибкий контроль, хорошо работает с "всплесками" трафика.
- Leaky Bucket — строгая равномерность, предотвращает перегрузки.
🔗 Полная статья с пояснениями и кодом:
https://dev.to/jones_charles_ad50858dbc0/implementing-rate-limiters-in-go-token-bucket-and-leaky-bucket-made-simple-5162
📌 Хочешь ограничить количество запросов в секунду к API или ресурсу? В статье [на dev.to](https://dev.to/jones_charles_ad50858dbc0/implementing-rate-limiters-in-go-token-bucket-and-leaky-bucket-made-simple-5162) показано, как реализовать два самых популярных алгоритма рейтлимитинга:
🪙 Token Bucket
- Каждому клиенту выделяется "ведро" с токенами.
- Запросы забирают по 1 токену.
- Токены добавляются с фиксированной скоростью.
- Если токенов нет — запрос блокируется или отклоняется.
Пример на Go:
bucket := make(chan struct{}, 5) // max 5 токенов
go func() {
for range time.Tick(200 * time.Millisecond) {
select {
case bucket <- struct{}{}:
default:
}
}
}()
💧 Leaky Bucket
- Все запросы ставятся в очередь (как в воронке).
- Обработка идёт с фиксированной скоростью, капля за каплей.
- Если очередь переполнена — лишние запросы отбрасываются.
Пример на Go:
queue := make(chan struct{}, 5)
go func() {
for {
<-queue
time.Sleep(200 * time.Millisecond)
fmt.Println("Processed request")
}
}()
📊 Выбор зависит от задачи:
- Token Bucket — гибкий контроль, хорошо работает с "всплесками" трафика.
- Leaky Bucket — строгая равномерность, предотвращает перегрузки.
🔗 Полная статья с пояснениями и кодом:
https://dev.to/jones_charles_ad50858dbc0/implementing-rate-limiters-in-go-token-bucket-and-leaky-bucket-made-simple-5162
👍17❤6
📚 Новый инструмент для ИИ-агентов —
Open-source проект
🧠 Что умеет:
• Работает как MCP-сервер — можно интегрировать с Claude Desktop и другими агентами
• Поддерживает CLI-режим — ищи и скачивай прямо из терминала
• Использует официальный API Anna’s Archive (требуется ключ)
🔧 Пример использования:
💡 Особенности:
— Полноценная поддержка Model Context Protocol
— Удобная интеграция в пайплайны агентов
— Возможность автоматизировать получение научных текстов
⚠️ Напоминаем: Anna’s Archive содержит контент, на который могут распространяться авторские права. Использование — на ваш риск.
📌 Github
annas-mcp
Open-source проект
annas-mcp
превращает Anna’s Archive в полноценный MCP-сервер. Это значит, что теперь Claude и другие ИИ-агенты могут искать и скачивать книги, статьи и документы напрямую, как часть своей цепочки действий.🧠 Что умеет:
• Работает как MCP-сервер — можно интегрировать с Claude Desktop и другими агентами
• Поддерживает CLI-режим — ищи и скачивай прямо из терминала
• Использует официальный API Anna’s Archive (требуется ключ)
🔧 Пример использования:
export ANNAS_SECRET_KEY="ваш_ключ"
annas-mcp search "deep learning"
annas-mcp download <doc-id>
💡 Особенности:
— Полноценная поддержка Model Context Protocol
— Удобная интеграция в пайплайны агентов
— Возможность автоматизировать получение научных текстов
⚠️ Напоминаем: Anna’s Archive содержит контент, на который могут распространяться авторские права. Использование — на ваш риск.
📌 Github
❤6👍3🔥3
🚀 Вводный гайд по Go от FreeCodeCamp – ключевые концепции для новичков
Если вы только входите в мир Go — это must-read:
1. Переменные и типы данных
- Статическая типизация:
2. Управляющие конструкции
-
3. Функции и методы
- Объявление с параметрами и возвращаемыми значениями, включая множественный возврат и вариативные параметры.
- Методы с указателями и значениями в качестве ресиверов.
4. Указатели
- Получение адреса через
5. Structs & интерфейсы
- Группировка полей, композиция вместо наследования, интерфейсы для полиморфизма
6. Коллекции
- Массивы — неизменного размера.
- Срезы — динамические массивоподобные структуры.
- Карты — хранилища ключ–значение.
7. Стандартная библиотека и пакеты
- Базовые пакеты типа
8. Тестирование
- У FreeCodeCamp есть раздел про unit- и integration-тесты (см. оглавление).
9. Совместное развитие: gofmt и окружение
-
10. Конкуренция (упомянута, но в основном в другом гиде)
- Горутины, каналы, мьютексы — сильные стороны Go, подробнее в «Go Handbook».
Итог:
FreeCodeCamp предлагает отличную обзорную дорожную карту для начинающих: от базовых типов до функций, структур и тестирования. Это отличный старт, за которым
Если вы только входите в мир Go — это must-read:
1. Переменные и типы данных
- Статическая типизация:
int
, float
, bool
, string
, массивы, срезы, карты, struct
, указатели.2. Управляющие конструкции
-
if/else
, switch
, for
(единственный цикл в Go), включающий range
для обхода коллекций.3. Функции и методы
- Объявление с параметрами и возвращаемыми значениями, включая множественный возврат и вариативные параметры.
- Методы с указателями и значениями в качестве ресиверов.
4. Указатели
- Получение адреса через
&
, разыменование через *
, передача по ссылке 5. Structs & интерфейсы
- Группировка полей, композиция вместо наследования, интерфейсы для полиморфизма
6. Коллекции
- Массивы — неизменного размера.
- Срезы — динамические массивоподобные структуры.
- Карты — хранилища ключ–значение.
7. Стандартная библиотека и пакеты
- Базовые пакеты типа
fmt
, strings
, удобные инструменты для форматирования и работы со строками.8. Тестирование
- У FreeCodeCamp есть раздел про unit- и integration-тесты (см. оглавление).
9. Совместное развитие: gofmt и окружение
-
gofmt
+ VSCode — автоформатирование и подсветка, готовое окружение.10. Конкуренция (упомянута, но в основном в другом гиде)
- Горутины, каналы, мьютексы — сильные стороны Go, подробнее в «Go Handbook».
Итог:
FreeCodeCamp предлагает отличную обзорную дорожную карту для начинающих: от базовых типов до функций, структур и тестирования. Это отличный старт, за которым
❤13👍2🔥1🥰1🤬1
🧰 Plakar — бесплатное и полностью open‑source решение для резервного копирования, масштабируемое и надёжное.
🔐 Основные преимущества:
- Защита не только файлов, но и данных приложений — вся информация сохраняется с контекстом
- Использует Kloset — неизменяемое и распределённое хранилище с дедупликацией и шифрованием
- Быстро работает и масштабируется: резервные копии выполняются за секунды (S3: 14 мин → 13 сек — x60)
- Поддерживает резервирование, синхронизацию и восстановление на различных носителях — локально, S3, SFTP и др.
⚙️ Основные возможности:
- CLI/API/Web UI — чистая и интуитивная команда (`plakar backup`,
- End-to-end шифрование, проверенный аудит криптографии
- Масштабируется вертикально и горизонтально с низкой нагрузкой на память
- Поддержка многоконкурентного доступа, дедупликации, сжатия и поиска через UI
- Поддержка резервного копирования нескольких источников в один репозиторий
- UI‑панель позволяет удобно просматривать снапшоты и выбирать файлы для восстановления
📦 GitHub: https://github.com/PlakarKorp/plakar
🌐 Документация: https://docs.plakar.io
🔐 Основные преимущества:
- Защита не только файлов, но и данных приложений — вся информация сохраняется с контекстом
- Использует Kloset — неизменяемое и распределённое хранилище с дедупликацией и шифрованием
- Быстро работает и масштабируется: резервные копии выполняются за секунды (S3: 14 мин → 13 сек — x60)
- Поддерживает резервирование, синхронизацию и восстановление на различных носителях — локально, S3, SFTP и др.
⚙️ Основные возможности:
- CLI/API/Web UI — чистая и интуитивная команда (`plakar backup`,
plakar restore
, `plakar ui`) - End-to-end шифрование, проверенный аудит криптографии
- Масштабируется вертикально и горизонтально с низкой нагрузкой на память
- Поддержка многоконкурентного доступа, дедупликации, сжатия и поиска через UI
- Поддержка резервного копирования нескольких источников в один репозиторий
- UI‑панель позволяет удобно просматривать снапшоты и выбирать файлы для восстановления
📦 GitHub: https://github.com/PlakarKorp/plakar
🌐 Документация: https://docs.plakar.io
❤8👍6🔥4
🐳 Tilt + Docker = Быстрая разработка микросервисов. Этот инструмент делает работу с Docker-контейнерами в dev-режиме проще: автоматически пересобирает образы и обновляет окружение при изменениях кода. Замените ручные
Идеально подходит для тех, кто разрабатывает сложные мультисервисные приложения в Docker. Интеграция с Kubernetes позволяет плавно переходить от локальной разработки к продакшену.
🤖 GitHub
@DevopsDocker
docker-compose up
и docker build
на одну команду tilt up
. Идеально подходит для тех, кто разрабатывает сложные мультисервисные приложения в Docker. Интеграция с Kubernetes позволяет плавно переходить от локальной разработки к продакшену.
🤖 GitHub
@DevopsDocker
❤6🔥3👍2
🛡 SecureMCP — новый инструмент для аудита уязвимостей в LLM-инфраструктуре
Если вы работаете с агентами на базе MCP (Model Context Protocol), это must-have.
Что делает SecureMCP:
• Сканирует MCP-серверы на уязвимости: утечки токенов, prompt-инъекции, tool-poisoning
• Обнаруживает слабые конфигурации и нестабильные цепочки вызовов
• Даёт рекомендации и патчи: валидация входа, защита токенов, фильтрация prompt’ов
• Работает как CLI и Python-библиотека — можно встроить в CI/CD
• Полностью open-source: расширяйте под свои нужды
Почему важно:
💥 MCP стремительно проникает в production-LLM-агентов
💥 Уже есть случаи компрометации — prompt-инъекции, подмена responses и утечки OAuth
💥 SecureMCP — первая линия обороны на уровне протокола
🔗 https://github.com/makalin/SecureMCP
Если вы работаете с агентами на базе MCP (Model Context Protocol), это must-have.
Что делает SecureMCP:
• Сканирует MCP-серверы на уязвимости: утечки токенов, prompt-инъекции, tool-poisoning
• Обнаруживает слабые конфигурации и нестабильные цепочки вызовов
• Даёт рекомендации и патчи: валидация входа, защита токенов, фильтрация prompt’ов
• Работает как CLI и Python-библиотека — можно встроить в CI/CD
• Полностью open-source: расширяйте под свои нужды
Почему важно:
💥 MCP стремительно проникает в production-LLM-агентов
💥 Уже есть случаи компрометации — prompt-инъекции, подмена responses и утечки OAuth
💥 SecureMCP — первая линия обороны на уровне протокола
🔗 https://github.com/makalin/SecureMCP
🔥3👍2
Forwarded from Golang
В Datadog обновили Go до версии 1.24 и сразу заметили резкое падение использования памяти. Почему? В Go 1.24 появилась новая реализация хеш-таблиц — Swiss Tables, вдохновлённая подходом от Google.
📌 Что изменилось в Go:
— больше никаких overflow-бакетов
— увеличен load factor до 87.5%
— аллокация гибче: split вместо полного копирования
— меньше фрагментации и лучше кэш-локальность
📊 Пример:
map с 3.5 млн элементов:
• Go 1.23 — 726 MiB на бакеты
• Go 1.24 — 217 MiB
→ Экономия: ~500 MiB на одну карту
Но настоящая магия началась позже:
🛠️ Они нашли, что в структуре
Response
:• были неиспользуемые поля (`RoutingKey`, `LastModified`)
• поле
ShardType
было int
, хотя хватало uint8
После чистки размер структуры упал с 56 до 24 байт — и это дало ещё -250 MiB RSS с одного пода.
💡 Выводы:
1. Обновление Go = бесплатная оптимизация карт
2. Оптимизация структуры данных = ещё больше профита
3. Профилирование и метрики — must-have
📉 В сумме: сотни гигабайт экономии без изменения логики приложения.
🔗 Полный разбор:
https://www.datadoghq.com/blog/engineering/go-swiss-tables
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26
This media is not supported in your browser
VIEW IN TELEGRAM
Я сам решу! Что нужно идти на Golang meetup by Sber — 6 августа в 18:00! 😉
В программе 3 доклада:
🔹 «Улучшаем качество отчётов нагрузочного тестирования с помощью Go, langchain и GigaChat». Антон Юрченко, Сбер
🔹 «Не ждите ковариантности в Go — берите дженерики в работу». Станислав Иванкевич, СберТех
🔹 «Покой и любовь в тестировании сервисов на Go». Макс Теричев, YADRO
А ещё — стенды, нетворкинг и фуршет ☺️
Участвуйте как удобно: офлайн в Москве или онлайн. Ждём вас — регистрируйтесь по ссылке! 👌
В программе 3 доклада:
🔹 «Улучшаем качество отчётов нагрузочного тестирования с помощью Go, langchain и GigaChat». Антон Юрченко, Сбер
🔹 «Не ждите ковариантности в Go — берите дженерики в работу». Станислав Иванкевич, СберТех
🔹 «Покой и любовь в тестировании сервисов на Go». Макс Теричев, YADRO
А ещё — стенды, нетворкинг и фуршет ☺️
Участвуйте как удобно: офлайн в Москве или онлайн. Ждём вас — регистрируйтесь по ссылке! 👌
❤3🤬2
🚀 Go в American Express: как язык покорил финтех‑гиганта
С 2016 года инженеры AmEx внедряют Go в масштабные продакшн‑системы. Вот 7 ключевых инсайтов из их опыта:
///text
1. Go Modules теперь полностью решают dependency‑хаос — даже за корпоративным прокси.
2. Конкурентность — мощная, но коварная. Goroutines → да, но с контролем: context, defer, sync и обязат@golang_booksельный
3. В обучение вложились серьёзно: тренинги, менторство и своя документация по idiomatic Go.
4. Golden Framework — единый шаблон с логгингом, graceful shutdown, health‑checks и observability по умолчанию.
5. Производительность контролируется через встроенные инструменты:
6. Observability first: метрики, логгирование и трейсинг легко интегрируются в общую платформу мониторинга.
7. Сообщество внутри: 1000+ инженеров в активных каналах, общие практики и постоянные митапы.
///
📌 А ещё Go прошёл Language Showdown: 140 000 req/s — быстрее Node.js, Java и почти вровень с C++. Это и стало поворотной точкой.
📎 Подробнее: https://americanexpress.io/go-at-american-express-today/
@golang_books
С 2016 года инженеры AmEx внедряют Go в масштабные продакшн‑системы. Вот 7 ключевых инсайтов из их опыта:
///text
1. Go Modules теперь полностью решают dependency‑хаос — даже за корпоративным прокси.
2. Конкурентность — мощная, но коварная. Goroutines → да, но с контролем: context, defer, sync и обязат@golang_booksельный
-race
в тестах.3. В обучение вложились серьёзно: тренинги, менторство и своя документация по idiomatic Go.
4. Golden Framework — единый шаблон с логгингом, graceful shutdown, health‑checks и observability по умолчанию.
5. Производительность контролируется через встроенные инструменты:
pprof
, бенчмарки, GC‑паузы — всё под рукой.6. Observability first: метрики, логгирование и трейсинг легко интегрируются в общую платформу мониторинга.
7. Сообщество внутри: 1000+ инженеров в активных каналах, общие практики и постоянные митапы.
///
📌 А ещё Go прошёл Language Showdown: 140 000 req/s — быстрее Node.js, Java и почти вровень с C++. Это и стало поворотной точкой.
📎 Подробнее: https://americanexpress.io/go-at-american-express-today/
@golang_books
🔥13😁4🥰2❤1
⏱ Почему в Go нельзя полагаться на системное время?
В этой разобрали интересный кейс: монотоное и «стеночное» время (monotonic vs wall clock) в Go.
🔍 В чём проблема?
time.Now() в Go возвращает смешанное время:
— *монотоное* (для измерений)
— *реальное «стеночное»* (часы системы)
Если неправильно использовать это время в вычислениях (например, при сравнении таймштампов), можно получить неожиданные баги:
— прыжки при изменении системных часов
— некорректные таймауты и дедлайны
— рассинхрон в распределённых системах
💡 Рекомендация: для измерений использовать монотоное время (`Since`, `Until`), а для логов и меток — преобразовывать только wall clock.
📌 Пример:
Но если сохранить time.Time в лог или БД и потом пересчитать разницу:
Если за это время системное время изменилось (например, ntpd подвинуло часы), elapsed может быть отрицательным или неверным.
💣 В распределённых системах это особенно опасно:
- Неправильные таймауты
- Нарушение дедлайнов
- Отказ retry‑механизмов
📌 Полный разбор
В этой разобрали интересный кейс: монотоное и «стеночное» время (monotonic vs wall clock) в Go.
🔍 В чём проблема?
time.Now() в Go возвращает смешанное время:
— *монотоное* (для измерений)
— *реальное «стеночное»* (часы системы)
Если неправильно использовать это время в вычислениях (например, при сравнении таймштампов), можно получить неожиданные баги:
— прыжки при изменении системных часов
— некорректные таймауты и дедлайны
— рассинхрон в распределённых системах
💡 Рекомендация: для измерений использовать монотоное время (`Since`, `Until`), а для логов и меток — преобразовывать только wall clock.
📌 Пример:
start := time.Now()
time.Sleep(5 * time.Second)
elapsed := time.Since(start) // работает корректно, потому что Go использует монотоное время
Но если сохранить time.Time в лог или БД и потом пересчитать разницу:
start := time.Now()
// сохраняем start куда-то...
// позже:
elapsed := time.Now().Sub(start) // ❌ здесь может быть ошибка!
Если за это время системное время изменилось (например, ntpd подвинуло часы), elapsed может быть отрицательным или неверным.
💣 В распределённых системах это особенно опасно:
- Неправильные таймауты
- Нарушение дедлайнов
- Отказ retry‑механизмов
📌 Полный разбор
👍13❤8🥰1