Библиотека Go-разработчика | Golang
24K subscribers
2.48K photos
48 videos
88 files
4.95K links
Все самое полезное для Go-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/32d20779

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0

#WXSSA
Download Telegram
🔒 TOTP-аутентификация с нуля на Go

Разработчик решил не брать готовые решения типа Auth0 и создал полноценную систему двухфакторной аутентификации с нуля.

Результат — проект TickTOTP, который показывает, что за теми самыми 6-значными кодами, меняющимися каждые 30 секунд, стоит довольно элегантная логика.

Что внутри

Стек: Go для бэкенда, React + Vite + Tailwind для фронта, Redis для хранения секретов, всё упаковано в Docker Compose.

Три основных эндпоинта:

• Генерация TOTP-секрета и QR-кода
• Верификация 6-значного кода
• Проверка статуса пользователя

Автор отмечает, что для прода нужно добавить rate limiting, HTTPS, JWT-аутентификацию и резервные коды. Но как образовательный проект и база для своего решения — отличный старт.

➡️ Посмотреть гайд | Зеркало

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍124🤩2
Go идеален для бэкенда. Но «мозги» пишут на Python

Вам не обязательно переходить на Python полностью, но понимать архитектуру AI-агентов необходимо, чтобы эффективно интегрировать их в свои Go-сервисы через API или gRPC.

На курсе мы разбираем архитектуру агентов: как они хранят состояние, как работают с инструментами (Tools) и протоколом MCP. Эти знания помогут вам строить надёжные мосты между высокопроизводительным Go-бэкендом и AI-логикой.

Что полезного для Go-разработчика:

— Понимание Model Context Protocol (MCP).
— Архитектура мультиагентных систем (оркестрация).
— Работа с векторными базами данных (актуально для любого языка).

Разобраться в архитектуре AI-систем
😁21🥱101😢1🌚1
🆕 Дайджест недели

Собрали для вас самое главное за неделю.

Fiber v3.0.0

gopdfsuit v4.2.0

Первый заказ на фрилансе

Dota 2 + Go

Ergo Framework v3.2.0

Go 1.25.7, 1.24.13 и 1.26rc3

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🌚1
🧑‍💻 gofmt для текста

Разработчик сделал утилиту fixr, которая приводит текст к единому стилю форматирования. Документация, заметки в проектах и письма коллегам выглядят аккуратно без ручной правки.

fixr использует ИИ, можно указать ключи для ChatGPT, Claude и даже на локальные LLM, поднятые с помощью ollama.

Установка:
git clone https://github.com/stadicshock/fixr && cd fixr
go build -o fixr .


Настроить конфиг:
./fixr config init
# В ~/.fixr/config.yaml указать ключ


Исправить текст из буфера обмена:
./fixr fix -c


➡️ Репозиторий

➡️ Собрать своего ИИ-агента

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱73👍1😁1
⚙️ Cовременный рефакторинг рефлексии

Анализатор reflecttypefor из пакета modernize помогает заменить устаревшие reflect.TypeOf на TypeFor в версиях 1.22+. Он находит места, где тип известен на этапе компиляции, и предлагает быстрые правки.

Рефлексия использует reflect.TypeOf для получения типа значения во время выполнения. Но если тип статический, TypeFor работает быстрее без лишних вычислений.

Пример до/после:
reflect.TypeOf((*ast.File)(nil)) → reflect.TypeFor[*ast.File]()


В Go-проектах с рефлексией – десериализаторами, ORM или тестами – запустите анализатор. gopls покажет предупреждения и автофикс, если запускаетесь в IDE.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🤔1🥱1
👨‍💻 Паттерн Singleflight

Singleflight гарантирует, что дорогая операция выполняется только один раз, даже если тысячи горутин запрашивают один и тот же ресурс одновременно.

Проблема: Cache Stampede. Типичная ситуация:

• 10 000 запросов за одной статьёй попадают в сервис
• Кеш для этой статьи как раз протух
• Все 10 000 запросов одновременно идут в базу
• База падает от нагрузки

Это cache stampede — классическая проблема распределённых систем.

Решение

Singleflight гарантирует, что для одного ключа в любой момент выполняется только одна операция. Остальные ждут и получают тот же результат:
import "golang.org/x/sync/singleflight"

var group singleflight.Group

func GetUser(id string) (*User, error) {
v, err, shared := group.Do(id, func() (interface{}, error) {
// Эта функция выполнится только один раз
return db.Query("SELECT * FROM users WHERE id = ?", id)
})

if err != nil {
return nil, err
}
return v.(*User), nil
}


Что происходит в коде:

1. Первый запрос выполняет функцию
2. Остальные 9 999 запросов ждут его завершения
3. Все получают одинаковый результат
4. База получает 1 запрос вместо 10 000

Что умеет либа sync.singleflight:

Do() — синхронное ожидание:
v, err, shared := group.Do(key, func() (interface{}, error) {
return expensiveOperation()
})


DoChan() — с таймаутом:
ch := group.DoChan(key, fetchData)

select {
case result := <-ch:
return result.Val, result.Err
case <-time.After(5 * time.Second):
return nil, fmt.Errorf("timeout")
}


Forget() — принудительный сброс:
group.Forget(key)  // Следующий запрос выполнится заново


Singleflight и кэш дополняют друг друга:
Запрос —→ Кеш? —→ Singleflight —→ База
↓ hit ↓ один запрос
Возврат Все ждут


Кэш — производительность при cache hit.
Singleflight — защита при cache miss.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍407🔥3🌚1
🤨 Реален ли DRY в реальной жизни

Вчера на собеседовании админа спросили вопрос, который поставил его в тупик:
Возможно ли применить DRY в своей повседневной жизни


На собеседовании в голову так ничего не пришло, но спустя пару часов появился вариант с двумя входными дверьми в квартиру. В обычном жилом доме явно не нужно второй вход.

💬 Сможете придумать свой ответ? Есть ли у вас дубли в жизни?

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚32
🔄 Релиз Go 1.26

Команда Go представила версию 1.26 с улучшениями языка, рантайма и инструментария.

Ключевые нововведения:

➡️ Язык

• Функция new теперь принимает выражения с начальным значением

• Дженерики получили поддержку самоссылающихся типов для сложных структур данных

➡️ Производительность

• Green Tea GC теперь включён по умолчанию.

• Накладные расходы cgo сократились примерно на 30%

• Компилятор чаще размещает слайсы на стеке

➡️ Инструменты

• go fix переписан с нуля: автоматические модернизации кода под новые возможности языка

• Встроенные анализаторы помогают использовать фичи эффективнее

➡️ Стандартная библиотека

• Три новых пакета: crypto/hpke, crypto/mlkem/mlkemtest, testing/cryptotest

➡️ Экспериментальное:

• simd/archsimd — работа с SIMD-инструкциями

• runtime/secret — безопасная очистка криптографических данных

➡️ Блог разработчиков

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥11👏4
✏️ API-клиент для терминала, который не заставит вас покидать tmux

Каждый разработчик на Go должен написать свой инструмент. Вот ещё один пример отличного проекта.

gottp — это альтернатива Postman и Insomnia для тех, кто живёт в терминале.

Проект поддерживает HTTP/REST, GraphQL, WebSocket и gRPC. Коллекции запросов хранятся в YAML-файлах, есть переменные окружения с интерполяцией, а импортировать данные можно из cURL, Postman или Insomnia.

➡️ Репозиторий

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥8
🤓 Топ-вакансий для Go-разработчиков за неделю

Middle+ Golang-разработчик
(ИИ-код) — 230 000 - 320 000 ₽. Удаленно (Москва)

Senior Golang Engineer в команду Отелло — до 550 000 ₽. Гибрид/Офис (Москва, Санкт-Петербург, Новосибирск)

Junior Go Developer — от 75 000 до 120 000 ₽. Удаленно (Казань)

➡️ Еще больше топовых вакансий — в нашем канале Go jobs

🐸 Библиотека Go-разработчика

#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
33
benchmark_test.go
11 KB
🚀 5 техник оптимизации Go

Оптимизация в Go нужна, когда приложение упирается в CPU, память или задержки в проде. Но Дональд Кнут прав: преждевременная оптимизация портит код, так что сначала замерьте узкие места.

Запускайте бенчмарки через go test -bench=. -benchmem или go test -cpu=1,2,4. Они покажут наносекунды на операции, аллокации и объекты в GC.

Для глубокого анализа используйте pprof: импортируйте net/http/pprof, соберите профиль curl localhost:8080/debug/pprof/profile?seconds=30, разберите go tool pprof.

Полный бенчмарк приложим отдельным файлом. Ниже будут сами техники.

📎 Преаллокация слайсов

Слайсы в Go динамические — они растут, когда заканчивается место.

Если знаете размер заранее, то укажите ёмкость:
make([]int, 0, известныйРазмер)


При указанной ёмкости будет 0 реаллокаций и предсказуемое потребление памяти. Лучше выделить чуть больше памяти, чем делать реаллокации.

📎 strings.Builder для строк

Строки в Go иммутабельны. Каждая операция s = s + "x" создаёт новую строку, копируя старую.

strings.Builder — это буфер, который растёт как слайс. Вы добавляете части, а в конце получаете готовую строку одним вызовом String().

Правило: если видите s += something в цикле — меняйте на Builder.

📎 Избегание конверсий []byte в string

Слайсы байт — изменяемые, а строки нет. Чтобы гарантировать, что строка не изменится, при конверсии string([]byte) Go всегда копирует данные. Даже если вы не планируете менять слайс.

Работайте с одним типом до конца. Если данные пришли как []byte — используйте функции для []byte.

data := []byte("payload")
str := string(data) // копирование
if strings.Contains(str, "error") { ... }

// Без копирования
if bytes.Contains(data, []byte("error")) { ... }


Unsafe вариант. Используйте осторожно — только если []byte не изменяется:
func unsafeString(b []byte) string {
return *(*string)(unsafe.Pointer(&b))
}

Zero-copy, но небезопасно eсли []byte освободится — строка будет указывать на мусор.

📎 Буферы для I/O

Каждый вызов Write() в файл или сеть — это системный вызов. Программа переключается, ядро делает операцию, возвращает управление. Это дорого.

Ядро эффективнее обрабатывает большие блоки данных, чем россыпь мелких запросов.

bufio.Writer — буфер для таких вызовов. Вы пишете в буфер, когда буфер заполнится или вы вызовете Flush() — данные уходят одним большим куском.

Eсли делаете >100 операций I/O в цикле — используйте буферизацию.

📎 Выравнивание полей в структурах

Процессор читает память словами — на 64-bit системе — 8 байт за раз. Если поле структуры не выровнено на границу слова, CPU придётся делать два чтения вместо одного.

Чтобы этого избежать, компилятор добавляет отступы — пустые байты для выравнивания. Но если поля расположены неоптимально, отступ может съесть много памяти.

Правила выравнивания:

• Сортируйте поля от большего к меньшему размеру
• Группируйте маленькие поля вместе
• Используйте инструменты для проверки

Эти техники — инструменты для конкретных проблем, а не обязательный чеклист для каждого проекта.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
20👍6
Чтобы ваши агенты не были такими глупыми приходите на наш курс по разработке AI-агентов

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoGiggle
Please open Telegram to view this post
VIEW IN TELEGRAM
😁74
🤖 Контрольный слой для продовых AI-систем

Когда компания внедряет LLM в продакшн, возникает проблема: как контролировать то, что уходит к OpenAI или Anthropic? Как убедиться, что модель не получит персональные данные клиентов или не выполнит SQL-инъекцию через подключенную базу данных?

AxonFlow решает эту задачу, размещаясь между вашим приложением и LLM-провайдером. Платформа проверяет каждый запрос на соответствие политикам безопасности ещё до того, как он достигнет модели.

Cистема анализирует не только входящие запросы, но и ответы от подключённых баз данных через MCP-коннекторы. Если в ответе обнаружены признаки эксплуатации уязвимостей, данные не передаются дальше.

Исходный код открыт, разработка ведётся на Go с покрытием тестами.

➡️ Репозиторий

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍3🥱3
🪴 Бустим продуктивность

Температура воздуха, растения на столе и даже звуки вокруг влияют на вашу работоспособность сильнее, чем вы думаете.

➡️ В карточках 5 базовых советов, а в статье продвинутые лайфхаки

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤔62
✏️ Разные версии — разный вывод

Код на картинке достаточно прост, чтобы скомпилировать его в голове. Загвоздка лишь в том, что на разных версиях вывод будет разный.

Попробуйте разгадать какая версия изменит этот код и в чём конкретно будет разница.

Ответ: здесь и здесь

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱11