Category : golang

golang
Маршрутизация электромобилей с учётом внешних условий и зарядных станций

Всем привет!ПредисловиеВ этой статье я расскажу о своих рассуждениях и расчётах, а также рассмотрю различные подходы к маршрутизации электрокаров с учётом внешних условий и подходящих зарядных станций для их последующего бронирования. Возможно, этот материал окажется полезным и поможет вам в реализации собственных проектов.СОДЕРЖАНИЕВведение1. Ситуация с электротранспортом в мире2. Преграды для запуска «электричек» в России3. Обзор научной литературы4. Пространственная фильтрация зарядных станц…

  • четверг, 10 сентября 2026 г. в 00:00:12
golang
История развития RAG на примере одного проекта

Как одна конкретная RAG-система эволюционировала из нейросети, которая ищет по md-файлам до многослойного пайплайна с графом знаний, гибридным ретривером и адаптивной схемой рассуждений.Начну с краткой предыстории.Проект переезжал в другое облако. Прод переехал успешно, но dev-среда - чаты, документация, код, задачи - подтягивались постепенно. Часть людей, хранящих особые знания не переехало. И ничего не предвещало беды.Я новый человек на проекте, долгожданная смена проекта. Техлид, спокойно пе…

  • среда, 9 сентября 2026 г. в 00:00:10
golang
Никто не просил — а я сделал банку робота‑секретаря

Я Тимур Баян, занимаюсь разработкой почти всю свою жизнь, ещё со студенческих лет. Программирование и разработка у меня в крови! Я люблю решать нерешаемые проблемы, делать людям жизнь легче, тестить гипотезы, создавать крутые продукты. Так меня позвали работать в Уралсиб помогать управлять уже не одной, а сразу тремя командами. Сложностей я не боюсь, так что ныряем в задачи с головой!Дано: три очень разные команды разработки, каждая со своим стеком технологий. С самого второго дня на меня понес…

  • среда, 9 сентября 2026 г. в 00:00:09
golang
Как лень довела меня до написания кодогенератора

Лень — двигатель прогресса. Я очень ленив, поэтому прогресс должен был выйти впечатляющим. Спойлер: он и вышел, но с ленью что-то пошло не так.Сколько раз можно написать «поле обязательно»Проект, в который я пришёл, был большой и почтенный, а валидация в нём жила внутри хендлеров. Выглядело это примерно так — и, подозреваю, вы такое видели:func (h *handler) CreateInvite(w http.ResponseWriter, r *http.Request) { var req InviteRequest if err := json.NewDecoder(r.Body).Decode(&req); er…

  • среда, 9 сентября 2026 г. в 00:00:07
golang
Рантайм показывает ту же память, а под убивают по OOM: пять ошибок под лимитами cgroup

Привет, Хабр!График памяти, вроде — ровный. runtime/metrics показывает те же 600 МиБ, что и месяц назад, heap-профиль не растёт, утечек нет. А kubectl describe pod пишет OOMKilled, и рестарты идут каждые пару часов. Оба числа правдивые, просто меряют разное: рантайм считает память, которую сам попросил у системы и за которой следит, а ядро перед убийством смотрит на RSS — сколько страниц реально лежит в физической памяти.Расхождение это ровесник самого Go в контейнерах. Новое тут другое: за пос…

  • среда, 9 сентября 2026 г. в 00:00:07
golang
context.Context в Go. Суть и частые ошибки

ВведениеПривет, Хабр! Сегодня поговорим о контексте: о его тонкостях и ошибках, которые возникают при его использовании.Что такое контекст?context.Context - это механизм для управления временем жизни операций, который появился в 2016 году в стандартной библиотеке начиная с Go 1.7. При этом то, что чаще всего называют контекстом (сам тип) является интерфейсом:type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key any) any }Исходя из …

  • понедельник, 7 сентября 2026 г. в 00:00:12
golang
f4, сайд‑проекты и помощь экосистеме Go

В процессе работы над f4, современной репродукцией Far Manager на Go, мне пришлось столкнуться с кучей ограничений экосистемы и написать массу вспомогательных библиотек, добавив недостающие кусочки паззла. Встроенный mp3 плеер f4 (да, он уже есть, пусть и на стадии PoC, вызывается по Ctrl+Shft+M) на скрине не просто так — это чуть ли не единственный плеер для *nix, нормально работающий с русскими кодировками id3v1 тэгов, для чего в том числе как раз потребовалась отдельная библиотека. Обзор все…

  • воскресенье, 6 сентября 2026 г. в 00:00:08
golang
Ваш сервис на домене клиента: CNAME, certbot и 300 строк Go вместо ACME on-demand

Есть класс фич, которые выглядят на одну строчку в тикете и на неделю в реализации. «Хочу, чтобы статус-страница жила на моём домене» — из таких. Клиент добавляет CNAME status.client.ru → status.your-service.com, и дальше начинается интересное: кто выпустит сертификат для чужого домена, кто его продлит, как не дать одному пользователю положить всю схему мусорными доменами и почему X-Forwarded-For может превратить внутренний эндпоинт в публичный.Я делал это для сервиса мониторинга — у него есть …

  • суббота, 5 сентября 2026 г. в 00:00:17
golang
Go 1.27 подменил движок encoding/json. Замерил три конфигурации и нашёл, где стало хуже

В Go 1.27 пакет encoding/json остался тем же по API и перестал быть тем же внутри: теперь это тонкий слой совместимости поверх нового encoding/json/v2. Обещание Go 1 выполняется честно, старый код компилируется и ведёт себя как раньше, но цифры под ним поменялись, причём в обе стороны. Я собрал go1.27.0 из исходников, взял старый go1.24.7 для контроля и прогнал одинаковые бенчмарки в четырёх конфигурациях. Разбор ниже: где выиграли, где потеряли полтора раза на ровном месте, что именно уже изме…

  • пятница, 4 сентября 2026 г. в 00:00:12