⚒️ Контрактный подход к API
В обычной разработке OpenAPI часто пишут отдельно, а потом забывают обновлять. Huma предлагает контрактный подход. операции регистрируются так, чтобы из них автоматически собиралась спецификация и документация.
Huma автоматически генерирует OpenAPI 3.1 JSON или YAML и включает в спецификацию все операции которые зарегистрированы в API.
Схемы запросов и ответов строятся из входных и выходных моделей, поэтому меньше шансов случайно задокументировать не то что реально отдается клиентам.
Плюс есть удобные дефолты по путям публикации. можно отдать openapi файл, UI документации и схемы, не делая отдельный сервис под docs.
➡️ Попробовать Huma
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
В обычной разработке OpenAPI часто пишут отдельно, а потом забывают обновлять. Huma предлагает контрактный подход. операции регистрируются так, чтобы из них автоматически собиралась спецификация и документация.
Huma автоматически генерирует OpenAPI 3.1 JSON или YAML и включает в спецификацию все операции которые зарегистрированы в API.
Схемы запросов и ответов строятся из входных и выходных моделей, поэтому меньше шансов случайно задокументировать не то что реально отдается клиентам.
Плюс есть удобные дефолты по путям публикации. можно отдать openapi файл, UI документации и схемы, не делая отдельный сервис под docs.
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👏4❤3
Некоммерческая компания dotMeow запустила краудфандинг на создание нового домена верхнего уровня — и у них получилось. Если всё пойдёт по плану, то скоро мы увидим домен
.meow.Заявленная цена регистрации домена в зоне
.meow — около €30 в год.📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🥱5👾3
Вот и прошла первая рабочая неделя нового года. Пора вспомнить что произошло за эти семь дней.
— Go 1.25.6 и 1.24.12
— Страшный сокращатель ссылок
— Трудоголизм — новая база
— Тело ответа утекло
— Свежий Cup o' Go
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Anonymous Poll
9%
go fix для бенчей
18%
Код подешевел, а софт нет
11%
Go Quests
27%
Утечка тела ответа
12%
Разбор стабильности сортировок
31%
Маленький слайс держит большой массив
30%
Go для телефонии
28%
fmt.Appendf вместо []byte
if price == old { buy() }Завтра стоимость обучения в Proglib.academy вырастет. Забирайте курс сегодня без лишних аллокаций в бюджете.
Запустить процесс обучения
😁5👍2❤1👾1
Bento — это высокопроизводительный и устойчивый потоковый процессор для обработки данных. Это форк оригинального проекта Benthos, созданный до изменения лицензии.
Основные возможности:
• Обработка потоков — подключение различных источников и приёмников данных: Kafka, NATS, Redis, AWS, GCP, Azure, MongoDB, PostgreSQL.
Декларативная конфигурация — настройка пайплайнов через простые YAML-файлы:
input:
gcp_pubsub:
project: foo
subscription: bar
pipeline:
processors:
- mapping: |
root.message = this
root.user.age = this.user.age.number()
output:
redis_streams:
url: tcp://TODO:6379
stream: baz
• Язык маппинга Bloblang — мощный инструмент для трансформации, обогащения и фильтрации данных
• Гарантии доставки — обеспечивает доставку «at least once» без необходимости сохранения состояния на диск
• Простое развёртывание — доступен как статический бинарник, Docker-образ или serverless-функция
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥1
Наткнулись тут на CLI-тулзу, написанную на Go. Выглядит как набор алиасов, но может есть в этом более глубинный смысл?
Примеры:
# Создать feature branch add-user-login
gwa feature add-user-login
# commit интерактивно
gwa commit
# Улучшенный colorized status
gwa status
➡️ Вот репозиторий
💬 Вы бы стали пользоваться таким? Или этот инструмент не для широкого круга разрабов?
📍 Навигация: Вакансии • Задачи • Собесы
#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8❤2👏2🌚1
В Go совершенно спокойно создают сотни тысяч горутин, хотя на тех же машинах тысяча системных потоков уже чувствуется как потолок по ресурсам.
Ключевое отличие в том, что поток это сущность ядра операционной системы с тяжелым контекстом и большим предвыделенным стеком, а горутина — это легковесная задача в пространстве пользователя, которой управляет рантайм Go.
Типичный системный поток резервирует мегабайты под стек, поэтому тысячи потоков быстро съедают память, тогда как горутина стартует с крохотного стека в несколько килобайт и умеет его динамически расширять.
Контекстный переключатель потоков работает через ядро, что добавляет десятки микросекунд на один свич, и при десятках тысяч потоков заметная часть CPU уходит только на планирование.
В Go планировщик живет в рантайме, мультиплексирует огромное количество горутин поверх ограниченного числа потоков и паркует горутину, когда та блокируется на канале или ожидании операций.
Для Go нормально моделировать каждое соединение или независимую задачу отдельной горутиной, но переносить такую модель один к одному на потоки в Java или C++ нельзя из за ограничений памяти и стоимости планирования.
📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤5
Анализатор
errorsastype из пакета modernize помогает заменить старый паттерн работы с ошибками на более безопасный вариант из Go 1.26. Он ищет типичные конструкции и предлагает правки, которые упрощают код без лишних переменных.Раньше разработчики часто объявляли переменную для целевой ошибки и передавали её
errors.As. Такой подход работал, но создавал лишние переменные и требовал осторожности с их использованием вне блока if.Новый метод
errors.AsType использует дженерики и возвращает саму ошибку плюс флаг успеха.Вот классический случай до правки:
var myerr *MyErr
if errors.As(err, &myerr) {
handle(myerr)
}
После применения фикса получается:
if myerr, ok := errors.AsType[*MyErr](err); ok {
handle(myerr)
}Код стал компактнее, без лишней
var. Компилятор теперь проверяет типы на этапе сборки.📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔15👍9❤1
Cloud native приложения — это набор небольших, слабо связанных между собой микросервисов, специально разработанных для развёртывания в контейнерах.
Если вы уже знаете Go, но не работали с облачными технологиями, то переход к облачной разработке требует изменения подхода, а не только смены инфраструктуры.
Наткнулись на базовый минимум по этой теме и делимся с вами. Проект дополняется и недавно собрал 1000 звёзд на GitHub.
📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👾2
LOOM — это фреймворк для создания нейронных сетей, написанный полностью на Go. Работает на CPU, поддерживает WebAssembly и экспериментальную GPU-акселерацию через WebGPU.
Что выделяет проект
• Нулевые зависимости. Компилируется в один бинарный файл. Не требует Python runtime, библиотек C++ или внешних пакетов.
• Кросс-платформенная совместимость. Модель, обученная в Go, работает идентично в Python, TypeScript, C# и браузере через WASM.
• Нативная поддержка типов. Работа с int8, uint16, float32, float64 на уровне движка. Не только для хранения весов, но для полноценного обучения и инференса.
• Чистый Go токенизатор. BPE-токенизатор совместим с HuggingFace. Не зависит от Rust или C++ библиотек. Можете загружать и использовать токенизаторы из HuggingFace Hub напрямую.
Для каких задач подходит
• Встраивание ML в Go-приложения. Сервисы, CLI-утилиты, облачные функции, где нужен один бинарник без зависимостей.
• Кросс-платформенные решения. Обучаете модель в Go, деплоите в браузер через WASM или используете через Python API без потери точности.
• Эксперименты с архитектурой. Динамическая генерация сетей, step-based forward для отладки, встроенная телеметрия через
GetMethodsJSON() и ExtractNetworkBlueprint().📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤5🤔4🤩1🥱1
This media is not supported in your browser
VIEW IN TELEGRAM
Высоконагруженные ИИ-агенты: роль RAG и Fine-tuning
23 января в 19:00 разберём, как интегрировать LLM в производительные системы на открытом уроке к курсу «Разработка ИИ агентов». Поговорим о том, как заставить модель отвечать по вашим данным, используя современные методы контекстного поиска.
Занятие ведёт Игорь Стурейко, тимлид в «Газпроме» и AI-архитектор. В своём видеосообщении Игорь объясняет, почему для создания надёжных агентов недостаточно просто вызвать API, и как инженерный бэкграунд помогает строить стабильные AI-решения.
Темы вебинара:
— использование
— архитектурные подходы фреймворков уровня
— сравнение эффективности дообучения и контекстного поиска.
📅 Когда: 23.01 в 19:00 МСК
Узнать подробности
23 января в 19:00 разберём, как интегрировать LLM в производительные системы на открытом уроке к курсу «Разработка ИИ агентов». Поговорим о том, как заставить модель отвечать по вашим данным, используя современные методы контекстного поиска.
Занятие ведёт Игорь Стурейко, тимлид в «Газпроме» и AI-архитектор. В своём видеосообщении Игорь объясняет, почему для создания надёжных агентов недостаточно просто вызвать API, и как инженерный бэкграунд помогает строить стабильные AI-решения.
Темы вебинара:
— использование
RAG для работы с документацией в реальном времени;— архитектурные подходы фреймворков уровня
LangChain;— сравнение эффективности дообучения и контекстного поиска.
📅 Когда: 23.01 в 19:00 МСК
Узнать подробности
❤3
Техлид в команду разработки (B2B) — до 490 000 ₽ в офис или гибрид в Москве или Питере.
Senior Golang-developer — от 342 000 ₽. Гибрид в Москве
Middle Golang Developer — от 280 200 ₽. Снова гибрид и снова Москва
📍 Навигация: Вакансии • Задачи • Собесы
#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4👍3❤1
Преобразование данных из Excel в JSON — частая задача при миграции legacy-систем или интеграции с API.
Excelize читает XLSX-файлы, парсит листы и ячейки. Код работает с динамическими данными: заголовки из первой строки, остальное — в
map[string]string. Нет нужды в жёстких типах или схемах — идеально для неизвестных таблиц.Установка:
go get github.com/xuri/excelize/v2
Пример кода
Функция берёт файл, пропускает заголовок и строит массив объектов:
package main
import (
"encoding/json"
"fmt"
"log"
"strings"
"github.com/xuri/excelize/v2"
)
func excelToJSON(filePath string) string {
f, err := excelize.OpenFile(filePath)
if err != nil {
log.Fatal(err)
}
defer f.Close()
rows, err := f.GetRows("Sheet1")
if err != nil || len(rows) == 0 {
return "[]"
}
data := make([]map[string]string, len(rows)-1)
headers := rows[0]
for i, row := range rows[1:] {
data[i] = make(map[string]string)
for j, cellValue := range row {
if j < len(headers) {
data[i][headers[j]] = cellValue
}
}
}
jsonData, _ := json.MarshalIndent(data, "", " ")
return string(jsonData)
}
func main() {
jsonStr := excelToJSON("data.xlsx")
fmt.Println(jsonStr)
}
Из таблицы с колонками id, name, age выйдет массив объектов. Пустые ячейки станут пустыми строками.
Библиотеки вроде Excel2JsonTree добавляют иерархию, но excelize хватит для 90% случаев.
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👾1
🎯 Нестандартные форматы резюме
Классическое резюме живет 7 секунд в голове рекрутера — а дальше стирается. Как выделиться в 2026-м, когда на одну вакансию приходят сотни похожих PDF-ок?
➡️ В статье — 6 небанальных форматов: от сайта-резюме с геймификацией до ченджлога в духе заметок о релизе.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
Классическое резюме живет 7 секунд в голове рекрутера — а дальше стирается. Как выделиться в 2026-м, когда на одну вакансию приходят сотни похожих PDF-ок?
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4❤2🌚2
Нужна коллекция для проверки существования ключа? Типичное решение джуна —
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