Обновить
128K+

Go *

Компилируемый, многопоточный язык программирования

202,71
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

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

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели2.3K

Всем привет!

В этой статье я расскажу о своих рассуждениях и расчётах, а также рассмотрю различные подходы к маршрутизации электрокаров с учётом внешних условий и подходящих зарядных станций для их последующего бронирования. Возможно, этот материал окажется полезным и поможет вам в реализации собственных проектов.

Читать далее

Новости

Как можно плохо сделать маленький тест если ты — большая компания? А вот же:)

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели3.3K

Когда рекламный баннер «Пройди Тест по Go от Selectel» всплыл уже четвертый раз за день — я сдался. Нажал и пошёл проходить тест — несмотря на аннотацию уровень оказался очень «базовым» так что через несколько минут я завершил его всего с одной ошибкой.

Это событие не стоило бы упоминать — но «впечатлило» оформление и воплощение теста — как можно видеть ниже — из‑за неаккуратности составителей даже и ответ где‑то иной подходит. Попытался об этом написать приватно, почтой — но, кажется, безуспешно. Может заметку на Хабре заметят быстрее?

Читать далее - тут не много...

Рантайм показывает ту же память, а под убивают по OOM: пять ошибок под лимитами cgroup

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6.8K

Go показывает стабильную память, heap-профиль молчит, а Kubernetes всё равно убивает под по OOM. Разберём, откуда берётся это расхождение, как на поведение под лимитами влияют cgroup, GOMAXPROCS и GOMEMLIMIT и что изменилось в последних версиях Go.

Разобрать причины

Как лень довела меня до написания кодогенератора

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели4.4K

Лень — двигатель прогресса. Я очень ленив, поэтому прогресс должен был выйти впечатляющим. Спойлер: он и вышел, но с ленью что-то пошло не так.

Началось с того, что я предложил взять go-playground/validator — и услышал, что рефлексия нас замедлит. Бенчмарки показали единицы микросекунд на структуру: примерно столько же, сколько json.Unmarshal того же тела, и на три порядка меньше похода в базу двумя строками ниже. Решение всё равно осталось прежним.

Поэтому я убрал рантайм целиком: разбор запроса и валидация генерируются из тегов структуры на этапе сборки. Опечатка в теге стала ошибкой генерации, а не пропущенной проверкой. Транспорт и вовсе оказался ни при чём.

Ниже — как это выглядит, чего генератор делать отказывается и чем я за это заплатил.

Читать далее

Никто не просил — а я сделал банку робота‑секретаря

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели10K

Я люблю решать нерешаемые проблемы, делать людям жизнь легче, тестить гипотезы, создавать крутые продукты. Так меня позвали работать в Уралсиб, где я решил создать робота-секретаря, помогающий со встречами и созвонами.

Читать далее

История развития RAG на примере одного проекта

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели10K

Это не очередной туториал «поставь LangChain и получи RAG за час». Это дневник того, как одна конкретная RAG-система вырастала из «нейросети, которая просто лазит грепом по md-файлам» до многослойного пайплайна с графом знаний, гибридным ретривом и адаптивной схемой рассуждений — и почему мне пришлось писать её с нуля, вместо того чтобы допилить существующую.

Почему?

context.Context в Go. Суть и частые ошибки

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.6K

Привет, Хабр! Сегодня поговорим о контексте: о его тонкостях и ошибках, которые возникают при его использовании.

Читать далее

f4, сайд‑проекты и помощь экосистеме Go

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели11K

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

Читать далее

Ваш сервис на домене клиента: CNAME, certbot и 300 строк Go вместо ACME on-demand

Время на прочтение9 мин
Охват и читатели10K

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

Читать далее

Как мы скрестили Go, Rust и MCP, чтобы построить масштабируемый оркестратор ИИ-агентов часть 2

Время на прочтение9 мин
Охват и читатели9.2K

Как мы скрестили Go, Rust и MCP, чтобы построить масштабируемый оркестратор ИИ-агентов часть 2.

Глубокий разбор архитектуры Zettaverse AgentHub

Кастомная валидация структуры flow_json и построение DAG

Читать далее

Go 1.27 подменил движок encoding/json. Замерил три конфигурации и нашёл, где стало хуже

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели7.7K

В Go 1.27 encoding/json стал тонким слоем поверх нового encoding/json/v2. Собрал тулчейн из исходников, прогнал один и тот же код в четырёх конфигурациях и разобрался, почему разбор в any стал медленнее в полтора раза.

Читать далее

От Root CA до User Authorization в nginx+apache. Часть 4. Свой web-УЦ: выпуск из браузера, роли и аудит

Уровень сложностиСредний
Время на прочтение82 мин
Охват и читатели8.1K

Четвёртая часть цикла про свой удостоверяющий центр. В первой мы развернули Root CA и три промежуточных центра, во второй научились отзывать сертификаты и подняли OCSP-responder, в третьей настроили вход по клиентскому сертификату в nginx и Apache. Осталось ответить на вопрос, который возникает сразу после первого успешного входа: а откуда у людей берутся сертификаты?

Пока удостоверяющим центром пользуется один человек, openssl в терминале — идеальный интерфейс. Как только приходит второй с просьбой «выпусти мне тоже», начинается то, ради чего существуют регистрационные центры: заявки, роли, журнал и ответ на вопрос «кто и на каком основании это подписал».

В четвёртой части:

— PKCS#10 прямо в браузере. Ключ рождается в WebCrypto и не покидает его, запрос собирается на голом JavaScript без единой библиотеки, а результат проверяется настоящим openssl, а не «на глаз».

— Почему кнопке «получить сертификат» нельзя доверять отличительное имя: позволь заявителю назвать себя самому — и он выпишет себе сертификат с DN администратора. Настоящий, подписанный вашим же центром.

— PKIDesk: движок управления сертификатами на Go, без единой зависимости, под Apache-2.0. Разрезан по границе доверия — у веб-части нет ни ключей УЦ, ни index.txt, ни даже бинарника openssl. Плюс пять архитектурных развилок, за которые придётся отвечать перед аудитом.

— Три дефекта, которые вылезли только на живом стенде: правило subjectAltName = supplied, которое не выполнится никогда; просроченный сертификат, который остаётся действующим и занимает subject; гонка «выпустил — сразу зашёл», где nginx запоминает неудачную проверку отзыва.

— Четыре расширенных справочника, 237 параметров: openssl req, openssl genpkey, структура PKCS#10 и Web Crypto API — синтаксис, значения, умолчания и подводные камни, сверенные с официальной документацией.

Читать далее

Как быстро влиться в чужой проект и не завалить коллег вопросами: тестируем Gemini Notebook

Время на прочтение20 мин
Охват и читатели13K

Обычный вечер понедельника. Я уже собирался уходить домой после работы, как вдруг зацепился за разговор коллег о неком Gemini Notebook. Стало интересно, что это, как люди им пользуются, а главное — надо ли оно мне. Глянул пару обзорных видео, послушал про его плюсы, чудеса и все такое прочее, но больше всего зацепил меня тезис о том, что окно контекста у этой штуки — миллион токенов. Вечер перестал быть томным.

Привет, Хабр! Меня зовут Вадим Гартман, я бэкенд-разработчик в Selectel. Недавно стал одним из ответственных за поддержку terraform-provider со стороны выделенных серверов, при том что ранее работал вообще в другом направлении. Я старался быстро влиться в проект, и будто бы ИИ-RAG-инструмент, способный обрабатывать и анализировать структуры огромных монолитов, появился очень кстати.

В общем, мы с Gemini Notebook встретились в странный период моей жизни. А что из этого вышло — читайте в этой статье.

Читать далее

Ближайшие события

Горутины изнутри, часть 3

Уровень сложностиПростой
Время на прочтение19 мин
Охват и читатели6K

Финал серии про горутины и рантайм Go. Здесь то, что происходит за пределами уютного мира G/M/P: системные вызовы, сеть, сборщик мусора. Плюс полный круг планировщика, после которого вывод GODEBUG=schedtrace читается как обычный лог, и все свежее из Go 1.22-1.27: рантайм, который начал делать работу за программиста.

Go читать

Каскад из одной аварии: как схлопнуть шторм алертов в одну карточку инцидента

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели5.5K

Падает один шлюз - и дежурному прилетает пачка уведомлений: молчат хосты за ним, гаснет uptime-монитор, срабатывают метрические пороги, горит SLO. Событие одно, уведомлений десятки. Разбираю, как собрать такой каскад в одну карточку инцидента и почему наивная реализация ломается: почему группировать надо по верхнему упавшему предку, а не по прямому родителю; что делать, когда события приходят в обратном порядке; почему “молчит, потому что за него сказал корень” и “не эскалируется, потому что родитель лежит” - это два разных состояния, которые нельзя склеивать; и где в такой системе обязательно выбирать шум вместо тишины. С кодом обхода графа, схемой таблиц и списком граблей.

Читать далее

Как мы скрестили Go, Rust и MCP, чтобы построить масштабируемый оркестратор ИИ-агентов

Время на прочтение4 мин
Охват и читатели7.8K

Model Context Protocol (MCP) от Anthropic перевернул работу с ИИ-агентами, но когда их становится больше трех, начинается ад с правами доступа, сетевым I/O и визуальным контролем. Мы задолбались собирать костыли на Python и написали масштабируемый опенсорс-оркестратор. Внутри — честный инженерный разбор: почему для ядра выбрали Go, как упаковали асинхронный движок JSON-RPC 2.0 на Rust в cdylib для вызова через cgo, и как мы героически побеждали утечки памяти на стыке этих двух миров.

Читать далее

Fluent Swap: как я вышел за пределы CRUD и начал разрабатывать matchmaking на Go

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели7.3K

Большинство backend‑проектов начинаются предсказуемо: HTTP‑запрос, бизнес‑логика, SQL и ответ клиенту. Но что изменится, если вместо очередного CRUD нужно одновременно искать собеседников, поддерживать долгоживущие WebSocket‑соединения и не допускать двойного matchmaking?

В этой статье я расскажу, как появился Fluent Swap, почему его первая версия работает без базы данных и как очередь в памяти одного Go‑процесса постепенно подводит архитектуру к Redis и горизонтальному масштабированию.

Читать далее

Анимации в терминале — это сложно (иногда)

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели7.4K

Не так давно я на ровном месте занялся написанием библиотеки на Go (spinq) для, казалось бы, тривиальной задачи — спиннера, который гарантированно не будет ломаться при конкурентных записях в stderr и stdout.

Все началось с того, что я писал вообще другой код — консольную утилиту для запуска тестов. И захотел прикрутить туда спиннер. Но не просто спиннер, а такой, что позволил бы использовать оба потока вывода — stderr и stdout, без риска оставить артефакты на экране. Более того, во время анимации мне нужно иметь возможность показывать на экране отчеты по завершившимся тестам, не откладывая это все до конца запуска/остановки спиннера. И так уж почему‑то получилось (спойлер: потому что не слишком просто, иногда совсем невозможно и мало кому нужно), что я не смог найти библиотеку, которая бы мне подошла.

Читать далее

Утёкшие горутины теперь ищет сборщик мусора. Проверил, где он молчит

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели8.7K

В Go 1.27 профиль goroutineleak вышел из эксперимента: рантайм научился доказывать, что горутину уже некому разбудить. Собрал тулчейн из исходников, прогнал десяток программ и замерил, что детектор находит, где он молчит и во что обходится вызов.

Читать далее

Судьба в пайплайне: пишем детерминированный Quality Gate на Go с механикой Таро

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели6.7K

В рамках этой статьи расскажу, как реализовалась идея о псевдорандоме и магии внутри пайплайна, и как я выложил инструмент который гадает «удачный ли будет релиз?» с помощью Таро на GitHub Market.

Читать далее
1
23 ...