Golang Books
17K subscribers
323 photos
6 videos
335 files
303 links
Библиотека Golang разработчика

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

@Golang_google - Golang

@golangl - golang chat

@GolangJobsit - golang channel jobs

@golangtests golang tests

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

№ 5032829002
Download Telegram
📦 Для Go появился лёгкий и удобный инструмент для событийной архитектуры

signals — это минималистичная библиотека без зависимостей, которая реализует простой pub-sub механизм для ваших Go-приложений.

Особенности:
- никаких внешних зависимостей
- тонкий и понятный API
- удобный in-process event system

Репозиторий: https://github.com/maniartech/signals

#golang
👍14🔥61
💡 Структуры в Go: под капотом они интереснее, чем кажется

На первый взгляд 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 и Go 1.24.9 - исправление ошибок после обновления безопасности

Команда 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
👍84🔥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
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
👍5🤔43🔥1