Единый агрегатор торговли

go-разработчик backend-сервисов

Коротко

Go-разработчик для backend-сервисов: REST API, gRPC, работа с БД (PostgreSQL), брокерами сообщений, XML/XSD, транзакции и конкурентная обработка. Требуется от 3 лет коммерческой разработки на Go и глубокое знание языка, SQL, тестирования и сетевых взаимодействий. Проектная работа в офисе Москвы до 30.07.2027 с перспективой перехода в штат, оформление по ТК РФ.

Описание
Ищем Middle Go Developer для разработки backend-сервисов. Предстоит самостоятельно реализовывать функции в принятой архитектуре, писать тесты и сопровождать код. Решения обсуждаем с архитектором и Senior-разработчиками. Рассматриваем также Senior-кандидатов с опытом из раздела «Будет преимуществом».
Задачи
•Разрабатывать сервисы на Go, REST API, gRPC-взаимодействие, обработчики сообщений и операции с БД.
•Реализовывать транзакции, конкурентную обработку и фоновые задачи; работать с XML/XSD.
•Писать unit- и интеграционные тесты, проводить нагрузочное тестирование; исправлять ошибки и оптимизировать Go-код и SQL.
•Участвовать в code review, обсуждать решения с командой, поддерживать документацию API и компонентов.
Требования
•От 3 лет коммерческой разработки на Go; опыт самостоятельной реализации и сопровождения функций в промышленной эксплуатации.
•Go. Структуры, указатели, slices, maps и interfaces; передача значений, общий backing array у slices и nil в интерфейсах.
•Небольшие интерфейсы, композиция, разделение обработчиков, прикладной логики и доступа к данным.
•Go modules и зависимости.
•Сохранение причины ошибки, errors.Is/As, defer, panic/recover.
•Работа с io.Reader/io.Writer, частичными чтениями; закрытие файлов и тел HTTP-ответов.
•Goroutines, channels, select, sync.WaitGroup/Mutex; понимание data race и deadlock, защита общих данных, корректное закрытие channels и завершение задач.
•Применение ограничений параллелизма и очередей, контроль фоновых задач при остановке сервиса.
•Передача context.Context в SQL и межсервисные вызовы, тайм-ауты и отмена, вызов cancel и освобождение ресурсов. Понимание, что отмена context не завершает goroutine автоматически.
•JOIN, группировки, подзапросы; PK/FK/UNIQUE/CHECK, индексы и чтение EXPLAIN.
•pgx/pgxpool или database/sql: параметризованные запросы, пул соединений, тайм-ауты, закрытие Rows, проверка ошибок итерации и обработка NULL.
•Контроль числа запросов и устранение N+1.
•ACID и конфликты конкурентных изменений; выполнение связанных запросов через один Tx, обработка Commit/Rollback и конфликтов записи. Отсутствие длительных сетевых вызовов внутри транзакции.
•Миграции goose/golang-migrate или аналогом с проверкой данных и совместимости схемы с кодом.
•Обработчики на net/http или фреймворке поверх него; OpenAPI, DTO, JSON, валидация, ошибки и пагинация.
•Переиспользование Client/Transport, тайм-ауты, ограничения размера запросов, обработка ошибок и ограниченные повторы с учётом идемпотентности.
•Реализация методов по Protocol Buffers-контрактам, работа со сгенерированными клиентами, status codes, deadlines и cancellation. Сохранение совместимости сообщений.
•Применение принятой аутентификации и авторизации, проверка прав на объект. Валидация JWT через библиотеку: подпись, допустимый алгоритм, issuer, audience и срок действия.
•Чтение и запись, TTL, правила ключей и инвалидации. Обработка отсутствующих и устаревших значений, тайм-аутов и отказа кэша с сохранением корректности приложения. Понимание отличий pipeline от атомарной операции.
•Практика с одним брокером: topics/partitions/consumer groups/offsets либо queues/exchanges/routing keys/ack/nack. Публикация, обработка и подтверждения, повторная доставка, идемпотентность, дедупликация, ограниченные retry и DLQ. Применение существующего механизма согласования записи в БД и отправки сообщений.
•Переходы по заданной модели, проверки допустимости, атомарные изменения, защита от повторных и конфликтующих операций.
•Работа с принятыми механизмами запуска, повторов и восстановления задач; расширение пакетов и обработчиков с сохранением контрактов.
•encoding/xml, теги структур, пространства имён, атрибуты, кодировки и ограничения размера данных. Чтение и изменение XSD: типы, ограничения, include/import. Работа с подключённым валидатором или сервисом: ошибки проверки и контроль доступа к внешним ресурсам.
•testing, table-driven tests, subtests, подмена зависимостей через интерфейсы. Проверка граничных случаев, ошибок и отмены; go test -race и разбор гонок.
•Интеграционные тесты с PostgreSQL, Redis и брокером через Testcontainers for Go или аналог: rollback, повторы и доставка сообщений. httptest, проверка ошибок gRPC.
•Структурированные логи, stack trace, данные запросов и отладчик.
•Git, gofmt, go vet, статический анализ и code review.
Будет плюсом
•Самостоятельное проектирование сервисов, границ компонентов, владения данными и контрактов; выбор синхронной или событийной модели.
•Переиспользуемые Go-пакеты и обоснованное применение generics; Go Memory Model, happens-before, sync.RWMutex, sync/atomic, errgroup.
•Диагностика сложных data race, deadlock и утечек goroutines.
•Проектирование worker pool, ограниченных очередей, backpressure и graceful shutdown.
•Потоковая обработка, частичные чтения и записи, контроль объёма данных в памяти.
•PostgreSQL: MVCC, уровни изоляции, CTE, оконные функции, SELECT FOR UPDATE, оптимистическая блокировка. Обработка deadlock и ошибок сериализации; EXPLAIN (ANALYZE, BUFFERS), составные и частичные индексы.
•Оптимизация пула соединений, пакетных операций и COPY.
•Миграции схем и данных с учётом блокировок и одновременно работающих версий приложения.
•Проектирование REST/gRPC-контрактов, совместимая эволюция Protobuf, interceptors.
•OAuth 2.0/OpenID Connect, ротация ключей проверки токенов, retry с backoff и jitter.
•Стратегии кэширования и инвалидации, singleflight и защита от массового обновления значения; транзакции Redis, Lua-скрипты и ограничения блокировок на основе TTL.
•Надёжная обработка сообщений: порядок и rebalance в Kafka, prefetch и publisher confirms в RabbitMQ.
•Transactional Outbox, границы at-least-once/exactly-once для брокера, БД и внешних вызовов.
•Идемпотентность через ключ операции, ограничения уникальности и сохранение результата; обработка частичного выполнения и неопределённого результата удалённого вызова.
•Проектирование фоновых задач с сохранением состояния, восстановлением после перезапуска и защитой от захвата несколькими экземплярами сервиса. Temporal или аналоги, компенсации многошаговых операций.
•Потоковая обработка больших XML через Decoder; проектирование и версионирование XSD, выбор и интеграция валидатора.
•Самостоятельная интеграция с КриптоПро: CMS/CAdES, XMLDSig, присоединённая и отсоединённая подпись, каноникализация XML, кодирование подписываемых данных.
•cgo: передача указателей, память Go/C, освобождение нативных ресурсов.
•Тестирование переполнения очередей, остановки и восстановления сервиса с управляемой синхронизацией; fuzzing парсеров и преобразований, benchmarks и benchmem; pprof, go tool trace: CPU-, heap-, goroutine-, mutex- и block-профили.
•Аллокации, escape analysis, GC, удержание backing arrays, лишние копирования; применение sync.Pool после измерений.
•Инструментирование кода через OpenTelemetry: метрики, трассировка, перенос контекста через HTTP/gRPC и сообщения; диагностика задержек во взаимодействующих сервисах.
•Практика NATS JetStream, OpenSearch/Elasticsearch, ClickHouse или S3-совместимого хранилища; проектирование схем данных и API.
Условия
•Формат работы: только офис.
•Тип занятости: проектная работа до 30.07.2027. После выполнения проекта рассматривается возможность оформления в штат на постоянной основе.
•Разработка нового продукта вместе с архитектором и опытными разработчиками; возможность развивать технические навыки и брать более сложные задачи.
•Оформление по ТК РФ.
•Уровень вознаграждения обсуждается по результатам собеседования.

Хватит откликаться.
Получите рекомендацию.

$10 стартовых кредитов

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

Это не отклик на вакансию: резюме не уходит в компанию, а рекомендацию именно по этой роли мы не обещаем.

Посмотрите, кто ещё получает интервью на автопилоте