Golang Books
16.6K subscribers
264 photos
4 videos
334 files
257 links
Библиотека Golang разработчика

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

@Golang_google - Golang

@golangl - golang chat

@GolangJobsit - golang channel jobs

@golangtests golang tests

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

№ 5032829002
加入频道
⚙️ Как правильно управлять конфигурацией в Go-приложении?

Алекс Эдвардс выпустил чёткий гайд по работе с настройками в веб-приложениях на 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:

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
👍176
📚 Новый инструмент для ИИ-агентов — 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. Переменные и типы данных
- Статическая типизация: 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`, 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-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
🔥3👍2
Forwarded from Golang
👣 Как Go 1.24 сэкономил сотни гигабайт памяти

В 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🤬2
🚀 Go в American Express: как язык покорил финтех‑гиганта

С 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🥰21
Почему в Go нельзя полагаться на системное время?

В этой разобрали интересный кейс: монотоное и «стеночное» время (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‑механизмов

📌 Полный разбор
👍138🥰1