Разработчик решил не брать готовые решения типа Auth0 и создал полноценную систему двухфакторной аутентификации с нуля.
Результат — проект TickTOTP, который показывает, что за теми самыми 6-значными кодами, меняющимися каждые 30 секунд, стоит довольно элегантная логика.
Что внутри
Стек: Go для бэкенда, React + Vite + Tailwind для фронта, Redis для хранения секретов, всё упаковано в Docker Compose.
Три основных эндпоинта:
• Генерация TOTP-секрета и QR-кода
• Верификация 6-значного кода
• Проверка статуса пользователя
Автор отмечает, что для прода нужно добавить rate limiting, HTTPS, JWT-аутентификацию и резервные коды. Но как образовательный проект и база для своего решения — отличный старт.
📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤4🤩2
Go идеален для бэкенда. Но «мозги» пишут на Python
Вам не обязательно переходить на Python полностью, но понимать архитектуру AI-агентов необходимо, чтобы эффективно интегрировать их в свои Go-сервисы через API или gRPC.
На курсе мы разбираем архитектуру агентов: как они хранят состояние, как работают с инструментами (Tools) и протоколом MCP. Эти знания помогут вам строить надёжные мосты между высокопроизводительным Go-бэкендом и AI-логикой.
Что полезного для Go-разработчика:
— Понимание Model Context Protocol (MCP).
— Архитектура мультиагентных систем (оркестрация).
— Работа с векторными базами данных (актуально для любого языка).
Разобраться в архитектуре AI-систем
Вам не обязательно переходить на Python полностью, но понимать архитектуру AI-агентов необходимо, чтобы эффективно интегрировать их в свои Go-сервисы через API или gRPC.
На курсе мы разбираем архитектуру агентов: как они хранят состояние, как работают с инструментами (Tools) и протоколом MCP. Эти знания помогут вам строить надёжные мосты между высокопроизводительным Go-бэкендом и AI-логикой.
Что полезного для Go-разработчика:
— Понимание Model Context Protocol (MCP).
— Архитектура мультиагентных систем (оркестрация).
— Работа с векторными базами данных (актуально для любого языка).
Разобраться в архитектуре AI-систем
😁21🥱10❤1😢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
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🌚1
Разработчик сделал утилиту 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
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱7❤3👍1😁1
Анализатор reflecttypefor из пакета modernize помогает заменить устаревшие
reflect.TypeOf на TypeFor в версиях 1.22+. Он находит места, где тип известен на этапе компиляции, и предлагает быстрые правки.Рефлексия использует
reflect.TypeOf для получения типа значения во время выполнения. Но если тип статический, TypeFor работает быстрее без лишних вычислений. Пример до/после:
reflect.TypeOf((*ast.File)(nil)) → reflect.TypeFor[*ast.File]()
В Go-проектах с рефлексией – десериализаторами, ORM или тестами – запустите анализатор.
gopls покажет предупреждения и автофикс, если запускаетесь в IDE.📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🤔1🥱1
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.
📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40❤7🔥3🌚1
Вчера на собеседовании админа спросили вопрос, который поставил его в тупик:
Возможно ли применить DRY в своей повседневной жизни
На собеседовании в голову так ничего не пришло, но спустя пару часов появился вариант с двумя входными дверьми в квартиру. В обычном жилом доме явно не нужно второй вход.
💬 Сможете придумать свой ответ? Есть ли у вас дубли в жизни?
📍 Навигация: Вакансии • Задачи • Собесы
#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚3❤2
🔄 Релиз 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
Команда Go представила версию 1.26 с улучшениями языка, рантайма и инструментария.
Ключевые нововведения:
• Функция new теперь принимает выражения с начальным значением
• Дженерики получили поддержку самоссылающихся типов для сложных структур данных
• Green Tea GC теперь включён по умолчанию.
• Накладные расходы cgo сократились примерно на 30%
• Компилятор чаще размещает слайсы на стеке
• go fix переписан с нуля: автоматические модернизации кода под новые возможности языка
• Встроенные анализаторы помогают использовать фичи эффективнее
• Три новых пакета: crypto/hpke, crypto/mlkem/mlkemtest, testing/cryptotest
• simd/archsimd — работа с SIMD-инструкциями
• runtime/secret — безопасная очистка криптографических данных
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥11👏4
Каждый разработчик на Go должен написать свой инструмент. Вот ещё один пример отличного проекта.
gottp — это альтернатива Postman и Insomnia для тех, кто живёт в терминале.
Проект поддерживает HTTP/REST, GraphQL, WebSocket и gRPC. Коллекции запросов хранятся в YAML-файлах, есть переменные окружения с интерполяцией, а импортировать данные можно из cURL, Postman или Insomnia.
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥8
Middle+ Golang-разработчик (ИИ-код) — 230 000 - 320 000 ₽. Удаленно (Москва)
Senior Golang Engineer в команду Отелло — до 550 000 ₽. Гибрид/Офис (Москва, Санкт-Петербург, Новосибирск)
Junior Go Developer — от 75 000 до 120 000 ₽. Удаленно (Казань)
#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
3❤3
benchmark_test.go
11 KB
🚀 5 техник оптимизации Go
Оптимизация в Go нужна, когда приложение упирается в CPU, память или задержки в проде. Но Дональд Кнут прав: преждевременная оптимизация портит код, так что сначала замерьте узкие места.
Запускайте бенчмарки через
Для глубокого анализа используйте pprof: импортируйте
Полный бенчмарк приложим отдельным файлом. Ниже будут сами техники.
📎 Преаллокация слайсов
Слайсы в Go динамические — они растут, когда заканчивается место.
Если знаете размер заранее, то укажите ёмкость:
При указанной ёмкости будет 0 реаллокаций и предсказуемое потребление памяти. Лучше выделить чуть больше памяти, чем делать реаллокации.
📎 strings.Builder для строк
Строки в Go иммутабельны. Каждая операция
Правило: если видите
📎 Избегание конверсий []byte в string
Слайсы байт — изменяемые, а строки нет. Чтобы гарантировать, что строка не изменится, при конверсии
Работайте с одним типом до конца. Если данные пришли как
Unsafe вариант. Используйте осторожно — только если
Zero-copy, но небезопасно eсли
📎 Буферы для I/O
Каждый вызов
Ядро эффективнее обрабатывает большие блоки данных, чем россыпь мелких запросов.
Eсли делаете >100 операций I/O в цикле — используйте буферизацию.
📎 Выравнивание полей в структурах
Процессор читает память словами — на 64-bit системе — 8 байт за раз. Если поле структуры не выровнено на границу слова, CPU придётся делать два чтения вместо одного.
Чтобы этого избежать, компилятор добавляет отступы — пустые байты для выравнивания. Но если поля расположены неоптимально, отступ может съесть много памяти.
Правила выравнивания:
• Сортируйте поля от большего к меньшему размеру
• Группируйте маленькие поля вместе
• Используйте инструменты для проверки
Эти техники — инструменты для конкретных проблем, а не обязательный чеклист для каждого проекта.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
Оптимизация в 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 реаллокаций и предсказуемое потребление памяти. Лучше выделить чуть больше памяти, чем делать реаллокации.
Строки в Go иммутабельны. Каждая операция
s = s + "x" создаёт новую строку, копируя старую.strings.Builder — это буфер, который растёт как слайс. Вы добавляете части, а в конце получаете готовую строку одним вызовом String().Правило: если видите
s += something в цикле — меняйте на Builder.Слайсы байт — изменяемые, а строки нет. Чтобы гарантировать, что строка не изменится, при конверсии
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 освободится — строка будет указывать на мусор.Каждый вызов
Write() в файл или сеть — это системный вызов. Программа переключается, ядро делает операцию, возвращает управление. Это дорого.Ядро эффективнее обрабатывает большие блоки данных, чем россыпь мелких запросов.
bufio.Writer — буфер для таких вызовов. Вы пишете в буфер, когда буфер заполнится или вы вызовете Flush() — данные уходят одним большим куском.Eсли делаете >100 операций I/O в цикле — используйте буферизацию.
Процессор читает память словами — на 64-bit системе — 8 байт за раз. Если поле структуры не выровнено на границу слова, CPU придётся делать два чтения вместо одного.
Чтобы этого избежать, компилятор добавляет отступы — пустые байты для выравнивания. Но если поля расположены неоптимально, отступ может съесть много памяти.
Правила выравнивания:
• Сортируйте поля от большего к меньшему размеру
• Группируйте маленькие поля вместе
• Используйте инструменты для проверки
Эти техники — инструменты для конкретных проблем, а не обязательный чеклист для каждого проекта.
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20👍6
Чтобы ваши агенты не были такими глупыми приходите на наш курс по разработке AI-агентов
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoGiggle
📍 Навигация: Вакансии • Задачи • Собесы
#GoGiggle
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7❤4
🤖 Контрольный слой для продовых AI-систем
Когда компания внедряет LLM в продакшн, возникает проблема: как контролировать то, что уходит к OpenAI или Anthropic? Как убедиться, что модель не получит персональные данные клиентов или не выполнит SQL-инъекцию через подключенную базу данных?
AxonFlow решает эту задачу, размещаясь между вашим приложением и LLM-провайдером. Платформа проверяет каждый запрос на соответствие политикам безопасности ещё до того, как он достигнет модели.
Cистема анализирует не только входящие запросы, но и ответы от подключённых баз данных через MCP-коннекторы. Если в ответе обнаружены признаки эксплуатации уязвимостей, данные не передаются дальше.
Исходный код открыт, разработка ведётся на Go с покрытием тестами.
➡️ Репозиторий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
Когда компания внедряет LLM в продакшн, возникает проблема: как контролировать то, что уходит к OpenAI или Anthropic? Как убедиться, что модель не получит персональные данные клиентов или не выполнит SQL-инъекцию через подключенную базу данных?
AxonFlow решает эту задачу, размещаясь между вашим приложением и LLM-провайдером. Платформа проверяет каждый запрос на соответствие политикам безопасности ещё до того, как он достигнет модели.
Cистема анализирует не только входящие запросы, но и ответы от подключённых баз данных через MCP-коннекторы. Если в ответе обнаружены признаки эксплуатации уязвимостей, данные не передаются дальше.
Исходный код открыт, разработка ведётся на 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🤔6❤2
Код на картинке достаточно прост, чтобы скомпилировать его в голове. Загвоздка лишь в том, что на разных версиях вывод будет разный.
Попробуйте разгадать какая версия изменит этот код и в чём конкретно будет разница.
Ответ:
📍 Навигация: Вакансии • Задачи • Собесы
#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱11