Forwarded from Golang
📊 Высокопроизводительная библиотека логирования для Go 🚀
mtlog — это библиотека структурированного логирования для Go, вдохновленная Serilog. Она обеспечивает нулевые аллокации для простых операций логирования и поддерживает мощные функции для сложных сценариев, включая шаблоны сообщений и совместимость с OpenTelemetry.
🚀Основные моменты:
- Нулевые аллокации для простых сообщений
- Поддержка шаблонов сообщений и Go синтаксиса
- Интеграция с Kubernetes и OpenTelemetry
- Многофреймворковая поддержка для HTTP
- Расширенные стратегии выборки и маршрутизации логов
📌 GitHub: https://github.com/willibrandon/mtlog
@golang_google
#golang
mtlog — это библиотека структурированного логирования для Go, вдохновленная Serilog. Она обеспечивает нулевые аллокации для простых операций логирования и поддерживает мощные функции для сложных сценариев, включая шаблоны сообщений и совместимость с OpenTelemetry.
🚀Основные моменты:
- Нулевые аллокации для простых сообщений
- Поддержка шаблонов сообщений и Go синтаксиса
- Интеграция с Kubernetes и OpenTelemetry
- Многофреймворковая поддержка для HTTP
- Расширенные стратегии выборки и маршрутизации логов
📌 GitHub: https://github.com/willibrandon/mtlog
@golang_google
#golang
👍4❤2🔥2
📦 Для Go появился лёгкий и удобный инструмент для событийной архитектуры
signals — это минималистичная библиотека без зависимостей, которая реализует простой pub-sub механизм для ваших Go-приложений.
Особенности:
- никаких внешних зависимостей
- тонкий и понятный API
- удобный in-process event system
Репозиторий: https://github.com/maniartech/signals
#golang
signals — это минималистичная библиотека без зависимостей, которая реализует простой pub-sub механизм для ваших Go-приложений.
Особенности:
- никаких внешних зависимостей
- тонкий и понятный API
- удобный in-process event system
Репозиторий: https://github.com/maniartech/signals
#golang
👍14🔥6❤1
💡 Структуры в Go: под капотом они интереснее, чем кажется
На первый взгляд
- Почему структура занимает больше памяти, чем сумма её полей?
- Почему одни структуры можно сравнивать и использовать как ключ в
🗄️ Память, выравнивание и паддинг
Go хранит поля в памяти в порядке объявления. Чтобы данные были выровнены по границам процессора, компилятор добавляет "пустые байты" — padding.
Хотя тут одинаково, в больших структурах порядок полей может сэкономить десятки байт.
👉 Лайфхак: ставьте "тяжёлые" типы (int64, float64) выше "лёгких" (bool, byte), чтобы сократить паддинг.
⚖️ Сравнимость и ключи в map
Структуры можно сравнивать (==) и использовать как ключи в map, если все поля сравнимые.
✅ Как обойти:
Использовать фиксированный массив:
Или хранить хэш (uint64, строка) вместо самого среза.
📌 Вывод: структуры в Go — это не только про хранение данных. Зная про выравнивание и правила сравнимости, можно писать код, который будет и эффективным по памяти, и удобным в работе с map.
#golang #struct #memory #map
На первый взгляд
struct — это просто контейнер с полями. Но стоит углубиться, и появляются вопросы: - Почему структура занимает больше памяти, чем сумма её полей?
- Почему одни структуры можно сравнивать и использовать как ключ в
map, а другие — нет? 🗄️ Память, выравнивание и паддинг
Go хранит поля в памяти в порядке объявления. Чтобы данные были выровнены по границам процессора, компилятор добавляет "пустые байты" — padding.
type A struct {
B bool // 1 byte (+7 padding)
I int64 // 8 bytes
}
// Sizeof(A) = 16
type B struct {
I int64 // 8 bytes
B bool // 1 byte (+7 padding)
}
// Sizeof(B) = 16
Хотя тут одинаково, в больших структурах порядок полей может сэкономить десятки байт.
👉 Лайфхак: ставьте "тяжёлые" типы (int64, float64) выше "лёгких" (bool, byte), чтобы сократить паддинг.
⚖️ Сравнимость и ключи в map
Структуры можно сравнивать (==) и использовать как ключи в map, если все поля сравнимые.
type KeyGood struct {
ID int
Name string
}
// сравнимо, работает как ключ
type KeyBad struct {
Data []byte
}
// ошибка: []byte несравнимый тип
✅ Как обойти:
Использовать фиксированный массив:
type KeyArr struct { Digest [16]byte }
Преобразовать срез в строку:
key := string(digestBytes)
m := map[string]string{key: "value"}
Или хранить хэш (uint64, строка) вместо самого среза.
📌 Вывод: структуры в Go — это не только про хранение данных. Зная про выравнивание и правила сравнимости, можно писать код, который будет и эффективным по памяти, и удобным в работе с map.
#golang #struct #memory #map
❤19🔥8👍5🥰1
Команда Go выпустила минорные версии 1.25.3 и 1.24.9, чтобы устранить проблемы, появившиеся после предыдущего патча (1.25.2 и 1.24.8).
Тогда была введена слишком строгая проверка X.509-сертификатов, из-за чего часть приложений перестала работать.
Теперь эти ограничения удалены, но исправление уязвимости сохранено.
Разработчики приносят извинения и рекомендуют всем обновиться.
Подробнее: go.dev/doc/devel/release#go1.25.3
📡 Анонс: https://groups.google.com/g/golang-announce/c/YEyj6FUNbik/m/_SDlIvxuCAAJ
⬇️ Скачать: https://go.dev/dl/#go1.25.3
👉 Зеркало в Max
@Golang_google
#golang
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4🔥2
⚙️ Go Agent Development Kit - конструктор AI-агентов на Go
GADK (Go Agent Development Kit) - это фреймворк, который объединяет всё нужное для создания интеллектуальных агентов под реальные бизнес-задачи.
💡 Что умеет:
- 🧠 Встроенная работа с LLM-моделями
- 🔧 Выполнение инструментов и внешних команд
- 💾 Память и поиск по контексту
- 🤝 Координация нескольких агентов
- 🪶 Чистый и практичный API, заточенный под доменные сценарии
Если ты разрабатываешь на Go и хочешь собрать своего ChatGPT-подобного ассистента, автономного воркера или pipeline с агентами - GADK даёт тебе базу для этого без Python и без боли.
🔗 https://github.com/Raezil/go-agent-development-kit
#Golang #AI #Agents #LLM #Framework #GoDev #OpenSource
GADK (Go Agent Development Kit) - это фреймворк, который объединяет всё нужное для создания интеллектуальных агентов под реальные бизнес-задачи.
💡 Что умеет:
- 🧠 Встроенная работа с LLM-моделями
- 🔧 Выполнение инструментов и внешних команд
- 💾 Память и поиск по контексту
- 🤝 Координация нескольких агентов
- 🪶 Чистый и практичный API, заточенный под доменные сценарии
Если ты разрабатываешь на Go и хочешь собрать своего ChatGPT-подобного ассистента, автономного воркера или pipeline с агентами - GADK даёт тебе базу для этого без Python и без боли.
🔗 https://github.com/Raezil/go-agent-development-kit
#Golang #AI #Agents #LLM #Framework #GoDev #OpenSource
❤10👍3
🚀 Как ускорить доступ к файлам на Go в 25 раз?
В блоге от Varnish Software рассказывается, как использование memory-map (mmap) вместо классического чтения файлов (seek/read) дало огромный прирост скорости: random lookup ≈ 3.3 нс против ≈ 416 нс с ReaderAt.
✔️ Основная идея: вместо системных вызовов чтения данных из файла, маппим файл в память и читаем как обычный массив указателей.
⚠️ Однако есть важный нюанс: запись через mmap может быть очень неэффективной из-за page-fault’ов и управления виртуальной памятью.
📌 Полезно, если:
- много операций чтения, особенно случайного доступа;
- работа с большими файлами и важна производительность;
- запись файлов - не основная задача.
Если нужно быстро взглянуть на статью: https://info.varnish-software.com/blog/how-memory-maps-mmap-deliver-25x-faster-file-access-in-go
Benchmarks: https://github.com/perbu/mmaps-in-go
CDB64 files with memory maps: https://github.com/perbu/cdb
#GoLang #Performance #MemoryMap #mmap #SystemsProgramming #BackendEngineering
@golang_books
В блоге от Varnish Software рассказывается, как использование memory-map (mmap) вместо классического чтения файлов (seek/read) дало огромный прирост скорости: random lookup ≈ 3.3 нс против ≈ 416 нс с ReaderAt.
✔️ Основная идея: вместо системных вызовов чтения данных из файла, маппим файл в память и читаем как обычный массив указателей.
⚠️ Однако есть важный нюанс: запись через mmap может быть очень неэффективной из-за page-fault’ов и управления виртуальной памятью.
📌 Полезно, если:
- много операций чтения, особенно случайного доступа;
- работа с большими файлами и важна производительность;
- запись файлов - не основная задача.
Если нужно быстро взглянуть на статью: https://info.varnish-software.com/blog/how-memory-maps-mmap-deliver-25x-faster-file-access-in-go
Benchmarks: https://github.com/perbu/mmaps-in-go
CDB64 files with memory maps: https://github.com/perbu/cdb
#GoLang #Performance #MemoryMap #mmap #SystemsProgramming #BackendEngineering
@golang_books
👍5❤3🤔2🔥1