# Go и доставка одним бинарём - Дата: 2026-06-13 ## Контекст Jellybit — новый сервис, который будет жить на домашнем медиа-сервере umbar. Нужно выбрать язык и способ доставки. Силы и ограничения: - Это домашняя лаборатория, хочется максимально простой доставки: собрал здесь — скопировал готовый артефакт на сервер, без рантайма и лишних зависимостей на самой машине. - В umbar уже устоялось разделение: Python+uv используется вместе с Ansible (инфраструктура), а не для прикладных сервисов. - У автора уже есть несколько сервисов на Go — это знакомый и привычный стек именно под сервисы. - Сервису нужны: клиент qBittorrent, обращения к LLM, опц. клиенты TMDB/TVDB, разбор имён релизов. ## Рассмотренные варианты - **Go** — один статический бинарь (`CGO_ENABLED=0`), копируется на сервер; минимальный docker-образ. Знакомый стек. Минус: нет хорошего аналога питоновского `guessit` для разбора имён релизов. - **Python + uv** — богатая экосистема распознавания (`guessit`), но тянет рантайм и зависимости на сервер; в проекте уже занят инфра-ролью при Ansible. Смешивать прикладной сервис с инфра-тулингом не хочется. - **TypeScript / Node** — экосистема есть, но рантайм на сервере и не основной стек автора для сервисов. ## Решение Пишем jellybit на **Go**, доставляем одним статическим бинарём: сборка в этом репозитории → готовый артефакт с нужной обвязкой копируется на umbar. На сервере не нужны ни рантайм, ни менеджер пакетов. Причина: при домашней лаборатории решающее — простота доставки и знакомство со стеком, а не богатство библиотек распознавания. Слабость Go в разборе имён релизов закрываем дешёвым `go-ptn` плюс основной разбор всё равно делает LLM; при нехватке точности `guessit` можно завернуть лёгким сервисом-спутником рядом с бинарём (тоже один файл). Python остаётся за инфраструктурой (umbar, Ansible). ## Последствия - `+` Доставка тривиальна: один файл, без рантайма и зависимостей на сервере; минимальный docker-образ. - `+` Стек знаком автору, переиспользуется опыт других Go-сервисов. - `+` Чёткая граница: Go — прикладные сервисы, Python+uv — инфра. - `-` Нет первоклассного `guessit`; точность пред-парса ниже. Митигация: `go-ptn` + LLM, при необходимости — guessit-спутник. - `-` Часть клиентов (например, TVDB v4) придётся писать руками — зрелых готовых библиотек меньше, чем в Python.