Нужна коллекция для проверки существования ключа? Типичное решение джуна —
map[string]bool или map[string]int. Работает, но расточительно: вы выделяете память под значение, которое вам не нужно.Решение senior-уровня: использовать пустую структуру.
Вы обрабатываете миллионы ID пользователей и храните список уже обработанных. С
map[int]struct{} вы экономите память на каждом элементе:type void struct{}
uniqueIDs := make(map[int]void)
var member void
uniqueIDs[1001] = member
uniqueIDs[2002] = member
_, exists := uniqueIDs[2002]
// True — ID найден, память не потрачена зря📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍9🥱1🌚1
This media is not supported in your browser
VIEW IN TELEGRAM
Пятница, 19:00. Худшее время для деплоя, но идеальное, чтобы разобраться, как строить производительные ИИ-сервисы на стыке Go и RAG.
Нейронки — это не только промпты, но и сложная инфраструктура данных. На открытом уроке поговорим о том, как проектировать эффективные пайплайны.
Основные темы:
— разбор подходов:
— стек технологий: работа с векторными хранилищами (`FAISS`, `Chroma`);
— кодинг: пайплайн для индексации документов и ответов на вопросы.
Один из спикеров — Алексей Яндутов, ML-инженер в поиске Яндекса.
Занятие открывает курс «Разработка AI-агентов». Если вы не планируете писать код для ИИ-сервисов, урок вам не подойдёт.
Записаться на урок
Нейронки — это не только промпты, но и сложная инфраструктура данных. На открытом уроке поговорим о том, как проектировать эффективные пайплайны.
Основные темы:
— разбор подходов:
RAG для динамических данных и Fine-tuning для стиля;— стек технологий: работа с векторными хранилищами (`FAISS`, `Chroma`);
— кодинг: пайплайн для индексации документов и ответов на вопросы.
Один из спикеров — Алексей Яндутов, ML-инженер в поиске Яндекса.
Занятие открывает курс «Разработка AI-агентов». Если вы не планируете писать код для ИИ-сервисов, урок вам не подойдёт.
Записаться на урок
proglib.academy
Курс| Разработка AI-агентов
Курс про контролируемую разработку AI-агентов: качество, стоимость, наблюдаемость и тестирование. С первого занятия — практическая работа.
🌚2👍1
🧑💻 Перехватываем пользователя
Вы когда-нибудь подключались к WiFi в кафе или аэропорту и видели страницу «Войти в сеть»? Это и есть captive portal. Можно написать свой за 30 строк кода на Go.
go-captive — это библиотека для создания captive порталов, которая обрабатывает whitelist, редиректы и проксирование HTTP(s) трафика на пользовательский портал. По сути, это man-in-the-middle TCP прокси с умным роутингом.
Как работает авторегистрация портала
Современные браузеры и ОС автоматически находят captive portal. До стандартизации RFC7710 клиенты запрашивали предопределённые страницы для обнаружения порталов по ответу.
Минималистичный пример:
Библиотека сама:
• Перехватывает HTTP трафик неавторизованных клиентов
• Редиректит на ваш портал
• Терминирует HTTPS для неавторизованных
• Пропускает разрешённых пользователей
Для полноценного WiFi хотспота нужно ещё настроить iptables:
Отличный пример того, как сложная задача решается элегантно в несколько десятков строк кода.
➡️ Репозиторий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoDeep
Вы когда-нибудь подключались к WiFi в кафе или аэропорту и видели страницу «Войти в сеть»? Это и есть captive portal. Можно написать свой за 30 строк кода на Go.
go-captive — это библиотека для создания captive порталов, которая обрабатывает whitelist, редиректы и проксирование HTTP(s) трафика на пользовательский портал. По сути, это man-in-the-middle TCP прокси с умным роутингом.
Как работает авторегистрация портала
Современные браузеры и ОС автоматически находят captive portal. До стандартизации RFC7710 клиенты запрашивали предопределённые страницы для обнаружения порталов по ответу.
Минималистичный пример:
proxy := &captive.Portal{
LoginPath: "/login",
PortalDomain: "mycaptive.com",
WebPath: "static",
LoginHandler: func(r *http.Request) bool {
// true = пустить в интернет
return true
},
}
proxy.Run()Библиотека сама:
• Перехватывает HTTP трафик неавторизованных клиентов
• Редиректит на ваш портал
• Терминирует HTTPS для неавторизованных
• Пропускает разрешённых пользователей
Для полноценного WiFi хотспота нужно ещё настроить iptables:
# Форвардим весь HTTP/HTTPS на прокси
iptables -t nat -A PREROUTING -i ap0 -p tcp --dport 80 \
-j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i ap0 -p tcp --dport 443 \
-j REDIRECT --to-port 8081
Отличный пример того, как сложная задача решается элегантно в несколько десятков строк кода.
📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤4⚡1🤩1
Статусное обновление о предстоящем релизе версии 1.26.0.
Основные моменты:
• 3 недели до релиза Go 1.26.0
• 214 открытых issues в майлстоуне
• 1 блокер, который нужно решить перед релизом
Работа кипит, 5 блокеров с предыдущего статуса команда уже закрыла.
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👾1
Собрали Go-приложение со статической линковкой. Какой минимальный образ можно брать для прода? alpine? ubuntu? А может вообще что-то экзотическое?
Попробуйте ответить до того, как посмотрите решение 👉
#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
💯2
🛠 Анализатор mapsloop
В Go 1.23 появился пакет maps с готовыми функциями для работы со словарями. Анализатор mapsloop находит циклы, которые копируют данные между мапами, и предлагает заменить их вызовами из этого пакета.
Классический цикл копирования:
В зависимости от контекста анализатор предложит одну из функций:
Вместо трёх строк — одна. Плюс сразу понятно намерение: вы копируете данные, а не делаете что-то сложное в цикле.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
В Go 1.23 появился пакет maps с готовыми функциями для работы со словарями. Анализатор mapsloop находит циклы, которые копируют данные между мапами, и предлагает заменить их вызовами из этого пакета.
Классический цикл копирования:
for k, v := range source {
target[k] = v
}В зависимости от контекста анализатор предложит одну из функций:
maps.Copy(target, source) — когда копируете в существующую мапуmaps.Insert(target, source...) — при добавлении элементовmaps.Clone(source) — для создания копииmaps.Collect(iter) — при работе с итераторамиВместо трёх строк — одна. Плюс сразу понятно намерение: вы копируете данные, а не делаете что-то сложное в цикле.
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🥱4👍2
Рутина множится, а ты всё ещё вручную «жаришь» каждый вызов LLM?
Это работа в забегаловке. Настоящий Шеф не пишет микросервисы вручную вечно — он проектирует Систему. 🐹
В понедельник, 26 января, стартует интенсив по разработке ИИ-агентов. Мы научим создавать эффективные автономные решения, которые закроют задачи бизнеса, пока ты занимаешься архитектурой.
В программе:
— мультиагентные системы в
— сложная логика в
—
Записаться на курс
Это работа в забегаловке. Настоящий Шеф не пишет микросервисы вручную вечно — он проектирует Систему. 🐹
В понедельник, 26 января, стартует интенсив по разработке ИИ-агентов. Мы научим создавать эффективные автономные решения, которые закроют задачи бизнеса, пока ты занимаешься архитектурой.
В программе:
— мультиагентные системы в
CrewAI: делегирование задач и параллельное исполнение;— сложная логика в
LangGraph: контроль состояний и предотвращение циклов;—
tool use интеграция: подключение агентов к высоконагруженным API и БД. 🚀Записаться на курс
😁6👾1
Чтобы двигаться вперёд нужно оглянуться назад на новости прошедших дней.
— Команда Go делится статусом о релизе 1.26
— Нестандартные форматы резюме
— WhoDB 0.89.0
В свежем релизе WhoDB CLI починили баг в стриминге AI-запросов, вернули Alpine в Docker для уменьшения размера образа, встроили BAML в CLI для автономности и обновили entitlements под macOS, отключив AI на armv7.
— Figlet-go v0.0.2-beta
Библиотека figlet-go полностью переписывает классический FIGlet 2.2.5 на Go, проходя все оригинальные тесты и генерируя идентичный вывод для создания ASCII-арта из текста.
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚1
Завтра стартуем: курс по разработке ИИ-агентов 🐹
Пора переходить к проектированию высокопроизводительных автономных систем. Мы научим создавать мультиагентные связки на
👉 Успейте занять место до начала занятий
Пора переходить к проектированию высокопроизводительных автономных систем. Мы научим создавать мультиагентные связки на
CrewAI, управлять сложной логикой в LangGraph и связывать ИИ-решения с вашими базами данных и сервисами.👉 Успейте занять место до начала занятий
🌚5❤🔥1👾1
Анализатор minmax упрощает условные присваивания, заменяя конструкции if/else на вызовы встроенных функций min и max, которые появились в Go 1.21.
До преобразования:
if a < b {
x = a
} else {
x = b
}После:
x = min(a, b)
Анализатор не применяется к числам с плавающей точкой. Причина: поведение min/max с NaN-значениями может отличаться от оригинальной if/else конструкции.
var a, b float64 = 1.0, math.NaN()
// if/else: может вернуть NaN в зависимости от порядка проверки
if a < b { x = a } else { x = b }
// min: имеет специфичное поведение с NaN
x = min(a, b)
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4
Posturr — приложение для macOS, которое следит за вашей осанкой через камеру и размывает экран, когда замечает, что вы сутулитесь. Выпрямились — экран мгновенно становится чётким.
Swift + Vision framework — очевидный выбор для macOS. Но что если переписать на Go?
Потенциальный стек: gocv для работы с камерой, mediapipe через CGo для оценки скрюченности, robotgo для манипуляций с экраном.
Swift + Vision — это easy mode для macOS. Go-реализация была бы сложнее, но открыла бы кроссплатформенность и интеграцию с существующими Go-экосистемами.
Если кто-то решится портировать на Go — было бы круто сделать это через TUI, чтобы запускать в tmux и видеть текущий статус осанки прямо в терминале. Что-то вроде htop, но для спины.
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤔4❤2🥰2🌚1
Оркестрация AI-агентов на практике
Go идеально подходит для высоконагруженных систем управления агентами. Но чтобы их строить, нужно понимать внутреннюю кухню
Старт сегодня в 19:00 МСК.
Что в планах:
— разберём
— научимся проектировать сложные мультиагентные воркфлоу;
— внедрим агентов в рабочие процессы;
— разберём вопросы масштабирования систем.
Узнать подробнее
Go идеально подходит для высоконагруженных систем управления агентами. Но чтобы их строить, нужно понимать внутреннюю кухню
LLM и Agentic Frameworks.Старт сегодня в 19:00 МСК.
Что в планах:
— разберём
CrewAI, LangGraph и AutoGen;— научимся проектировать сложные мультиагентные воркфлоу;
— внедрим агентов в рабочие процессы;
— разберём вопросы масштабирования систем.
Узнать подробнее
❤9🤔2
📰 Go в России
Компания Touch Instinct провела исследование о том, где Go показывает наибольшую эффективность и какие перспективы у языка на российском рынке.
Почему переходят на Go
Главная причина выбора Golang оказалась простой — запрос работодателей. Так ответили 22% участников опроса. Ещё 18% указали на личный интерес к изучению языка, а 14% работают на нём по требованию конкретного проекта.
Многие смотрят на Go как на способ заработать больше. 12% связывают знание языка с ростом зарплаты, а 9% отметили нехватку Go-специалистов на рынке.
Где Go нужен больше всего
77% опрошенных работают в IT-компаниях. Go особенно популярен в финансах, телекоме, e-commerce и геймдеве — там, где важна стабильность и производительность под нагрузкой.
30% респондентов говорят, что Go ускоряет разработку и повышает производительность продуктов. Компании быстрее выпускают обновления и сокращают Time-to-Market.
Прогнозы
Мнения разделились: 39% считают, что Go сохранит текущие позиции, 32% — что будет востребован в отдельных отраслях, 14% уверены, что станет основным языком для большинства продуктов.
Go превратился из нишевого инструмента в универсальное решение для высоконагруженных систем. Спрос на специалистов превышает предложение, а сообщество растёт.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoLive
Компания Touch Instinct провела исследование о том, где Go показывает наибольшую эффективность и какие перспективы у языка на российском рынке.
Почему переходят на Go
Главная причина выбора Golang оказалась простой — запрос работодателей. Так ответили 22% участников опроса. Ещё 18% указали на личный интерес к изучению языка, а 14% работают на нём по требованию конкретного проекта.
Многие смотрят на Go как на способ заработать больше. 12% связывают знание языка с ростом зарплаты, а 9% отметили нехватку Go-специалистов на рынке.
Где Go нужен больше всего
77% опрошенных работают в IT-компаниях. Go особенно популярен в финансах, телекоме, e-commerce и геймдеве — там, где важна стабильность и производительность под нагрузкой.
30% респондентов говорят, что Go ускоряет разработку и повышает производительность продуктов. Компании быстрее выпускают обновления и сокращают Time-to-Market.
Прогнозы
Мнения разделились: 39% считают, что Go сохранит текущие позиции, 32% — что будет востребован в отдельных отраслях, 14% уверены, что станет основным языком для большинства продуктов.
Go превратился из нишевого инструмента в универсальное решение для высоконагруженных систем. Спрос на специалистов превышает предложение, а сообщество растёт.
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4
🖼 Изображения в TUI на Go
Разработчик делится опытом решения проблемы размытых обложек книг в терминале.
Он создаёт TUI-приложение для управления электронными книгами и столкнулся с проблемой качества отображения обложек книг.
Было использовано множество подходов:
• Манипуляции с параметрами библиотек — изменение настроек обеих библиотек, использование встроенных инструментов вроде Sharpen, Blur, AdjustSigmoid.
• Расчёт реальных пикселей ячейки — использование unix-пакета для определения реального размера пикселей ячейки терминала и применение этих значений в переменных.
• Ручная настройка пикселей — вместо динамического расчёта пробовал фиксированные значения.
После многих часов экспериментов удалось достичь нужного качества. Ключом оказалось понимание того, как работают ячейки терминала.
Терминалы состоят из ячеек — это как маленькие контейнеры, состоящие из крошечного холста пикселей. Нужно:
1. Определить, сколько пикселей занимает одна ячейка терминала
2. Умножить это значение на текущую ширину/высоту виджета
3. Использовать полученные значения как целевое разрешение для изображений
➡️ Посмотреть код
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoDeep
Разработчик делится опытом решения проблемы размытых обложек книг в терминале.
Он создаёт TUI-приложение для управления электронными книгами и столкнулся с проблемой качества отображения обложек книг.
Было использовано множество подходов:
• Манипуляции с параметрами библиотек — изменение настроек обеих библиотек, использование встроенных инструментов вроде Sharpen, Blur, AdjustSigmoid.
• Расчёт реальных пикселей ячейки — использование unix-пакета для определения реального размера пикселей ячейки терминала и применение этих значений в переменных.
• Ручная настройка пикселей — вместо динамического расчёта пробовал фиксированные значения.
После многих часов экспериментов удалось достичь нужного качества. Ключом оказалось понимание того, как работают ячейки терминала.
Терминалы состоят из ячеек — это как маленькие контейнеры, состоящие из крошечного холста пикселей. Нужно:
1. Определить, сколько пикселей занимает одна ячейка терминала
2. Умножить это значение на текущую ширину/высоту виджета
3. Использовать полученные значения как целевое разрешение для изображений
📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4
Когда начинаете новый проект, первые несколько часов уходят на одно и то же: настройка базы данных, конфигурация JWT, структура папок, валидация запросов. goserve предлагает готовую базу, чтобы пропустить этот этап.
goserve — это фреймворк на базе Gin с интеграциями для типичных задач бэка:
• pgx или MongoDB для работы с данными
• go-redis для кеширования
• JWT с RS256 для токенов
• Viper для конфигов
• Валидация и криптографические утилиты
Проект организован по фичам, а не по слоям. Вместо глобальных папок controllers/, services/ каждая фича живет в своем модуле — users/, auth/ и так далее.
Запуск:
git clone https://github.com/afteracademy/goserve-example-api-server-postgres.git
cd goserve-example-api-server-postgres
go run .tools/rsa/keygen.go && go run .tools/copy/envs.go
docker compose up --build -d
После этого сервер доступен на
localhost:8080.Новички увидят пример организации кода. Разработчики с опытом сэкономят время на настройке инфраструктуры.
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤3👍1
В новой версии Task появились две функции, которых давно ждали. Разберем, что они дают на практике.
Task — это инструмент на Go для автоматизации задач. Альтернатива Makefile, только с YAML-синтаксисом и без специфики make. Вы описываете команды в файле Taskfile.yml, а потом запускаете их через task имя-задачи.
К новым фичам.
Условное выполнение через
if:if: работает на уровне задачи или отдельной команды. Условие задается либо через bash-команду, либо через Go template.Пример на уровне задачи:
version: '3'
tasks:
deploy:
if: '[ "$CI" = "true" ]'
cmds:
- echo "Deploying..."
- ./deploy.sh
Задача deploy выполнится только если переменная окружения CI равна true. В локальной разработке деплой не запустится, в CI — запустится.
До этого в Task были
sources:, status: и preconditions:, но они решали другие задачи.Интерактивный ввод переменных
Вторая функция — автоматический запрос обязательных переменных. По умолчанию отключена, включается флагом
--interactive или параметром interactive: true в .taskrc.yml.Когда функция активна, Task будет спрашивать значения обязательных переменных во время выполнения:
version: '3'
tasks:
greet:
desc: Greet someone by name
requires:
vars:
- NAME
cmds:
- echo "Hello, {{.NAME}}!"
При запуске
task greet появится приглашение ввести NAME.Условное выполнение упрощает Taskfile, когда логика зависит от окружения или флагов. Не нужно создавать отдельные задачи для разных условий — одна задача с несколькими ветками.
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤4👍1
Golang-разработчик — до 200 000 ₽ на гибрид в МСК.
Junior Golang разработчик — до 120 000 ₽.
Golang Developer Middle+ — до 260 000 ₽ на удалёнку.
📍 Навигация: Вакансии • Задачи • Собесы
#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱3❤2🔥2
Go + AI-агенты: как строить архитектуру современных ИИ-сервисов
Хотя агентов чаще пишут на
Курс «Углубленные AI-агенты» поможет вам разобраться в теме на стыке инженерии и ИИ.
На курсе вы:
— поймете принципы работы мультиагентных систем;
— изучите фреймворки
— разберетесь с RAG и использованием внешних инструментов;
— узнаете, как деплоить и масштабировать агентские решения.
Обучение уже идет, залетайте.
🚀 Записаться на основной курс
Если сомневаетесь — просто посмотрите вводное занятие.
Хотя агентов чаще пишут на
Python, их бэкенд и инфраструктура в нагруженных системах часто ложатся на Go. Чтобы эффективно интегрировать ИИ в свои продукты, нужно понимать логику работы агентских систем.Курс «Углубленные AI-агенты» поможет вам разобраться в теме на стыке инженерии и ИИ.
На курсе вы:
— поймете принципы работы мультиагентных систем;
— изучите фреймворки
LangGraph и CrewAI;— разберетесь с RAG и использованием внешних инструментов;
— узнаете, как деплоить и масштабировать агентские решения.
Обучение уже идет, залетайте.
🚀 Записаться на основной курс
Если сомневаетесь — просто посмотрите вводное занятие.
❤1😁1
В Go 1.26 появится возможность передавать выражения в встроенную функцию
new. Раньше new принимал только типы — new(int), new(MyStruct). Теперь можно писать new(123) или new(x + y), и функция вернет указатель на значение выражения.Что делает анализатор newexpr
Анализатор находит функции вида:
func varOf(x T) *T { return &x }и предлагает два фикса.
Первый фикс — преобразовать функцию в обертку вокруг
new://go:fix inline
func varOf(x int) *int { return new(x) }
Директива
//go:fix inline указывает анализатору inline предлагать инлайнинг вызовов этой функции.Второй фикс — заменить вызовы функции напрямую на
new://Было
use(varOf(123))
//Стало
use(new(123))
Если в проекте есть десятки или сотни вызовов вспомогательных функций типа
varOf, intPtr, stringPtr, анализатор автоматизирует их замену.📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1