Go на рынке CIS и русскоязычной удалёнки ближе к backend и инфраструктуре, чем к «ещё один язык в резюме рядом с Python». Вакансии junior часто ждут HTTP-сервис, PostgreSQL, конкурентность без паники, Docker. Не ждут, что вы выучите все пакеты стандартной библиотеки и напишете свой оркестратор.

Ниже — карта до первой роли, а не туториал «Go за неделю». Какая база языка закрывает созвон, какой сервис собрать за 90 дней, чего не добавлять в skills с хайпа и как смотреть вакансии Golang-разработчика без самообмана про «язык будущего».

Коротко:

  • Сначала роль: backend на Go. Не мешайте в одном плане «Go + ML + мобилки».
  • База: модули, интерфейсы на практике, ошибки, слайсы, карты, горутины и каналы на уровне «не устроить гонку в учебном хендлере».
  • Сервис: net/http или один тонкий фреймворк, SQL, тесты, конфиг из окружения.
  • Kubernetes и «высокая нагрузка» — не вход, если в пяти вакансиях этого нет.
  • Готовность — compose up, тесты, рассказ про ошибку и контекст запроса. Не «прошёл Tour of Go».

Кому эта карта, а кому нет

Если вы хотите продуктовый backend на Python/Java, потому что так выглядят ваши объявления — не переключайтесь на Go из статьи «что учить». Переключайтесь, если в целевых вакансиях Go повторяется или вы уже в инфра/платформе. Вход в backend вообще: как стать backend-разработчиком. Навыки широкого backend: навыки backend-разработчика.

Junior на Go в CIS бывает меньше, чем на Java/Python. Это не повод врать в резюме. Это повод сделать один честный сервис и слать туда, где язык в тексте, плюс смежные роли, где Go в плюсах и вы готовы так и сказать.

Как читать объявление: если must-have — Go, PostgreSQL, Docker — это ваша карта. Если must-have — Kubernetes, service mesh, «опыт высокой нагрузки 3 года» — не ваш слот на 90-й день. «Go будет плюсом» в Python-команде имеет смысл, когда основной стек у вас уже есть; иначе вы снова без роли. Не собирайте резюме «Python/Java/Go backend» с тремя hello world.

Формат работы: много Go-ролей ближе к платформе, биллингу, интеграциям, внутренним API, чем к «ещё один интернет-магазин». Учебный сервис коротких ссылок или тикетов всё равно валиден: там есть уникальность, конфликт, БД, таймаут. Не нужно имитировать высоконагруженный прокси, чтобы показать язык.

Инструментарий команды: git, code review самому себе через PR, linter. На созвоне могут попросить написать хендлер на доске или в редакторе. Тренируйте это на своём пакете: создать сущность, вернуть 409, закрыть rows. Это полезнее спора, «какой язык быстрее в бенчмарке блога».

База языка под созвон, не под экзамен

Tour of Go — старт на несколько дней, не профессия. Дальше пишите код сервиса и возвращайтесь к языку, когда упираетесь.

Слайсы и массивы: длина, ёмкость, случай «отрезал и удивился, что исходник изменился». Карты: итерация в случайном порядке, не хранить в ключе то, что не сравнивается так, как вы думаете. Строки — байты и руны на пальцах, чтобы не порезать UTF-8 в учебном ключе короткой ссылки. fmt и логи: структурированный лог или хотя бы единый префикс request id, не десяток Println.

Инструменты: go test ./..., go fmt, гошный линтер по возможности. Модули: не вендорьте «на всякий случай» без причины. Версии зависимостей зафиксируйте. Если тянете ORM — один, и всё равно читайте SQL. Если database/sql — напишите два запроса руками и закройте rows.

  • модули, версии, зачем go.mod, не GOPATH-ностальгия;
  • ошибки: обёртки, сравнение, когда sentinel;
  • указатели vs значения в полях структур — практическое правило, не философия;
  • интерфейсы: маленькие, там, где есть два поведения, не «интерфейс на каждую структуру»;
  • горутины: утечка, wait, контекст отмены запроса;
  • тесты в _test.go, табличные кейсы.

Generics — точечно, если упростили свой код. Не как цель месяца. Reflection — не вход. Cgo — нет.

Сервис, который стыкуется с вакансиями

Типичный контур: REST, JSON, Postgres, миграции, логи в stdout, graceful shutdown на пальцах, Docker. Фреймворк: стандартный net/http плюс chi/echo/gin — один, как в ваших объявлениях. Не три.

SQL: database/sql или тонкий обёртка. Понимать запрос важнее, чем «орм за 5 минут». SQL-карта: SQL roadmap. Docker: Docker roadmap.

Очереди и gRPC — если в пяти вакансиях есть. Иначе README честно: «нет брокера». Это лучше, чем строка Kafka без кода.

Чего не учить в первые 90 дней

  • свой фреймворк и «микроядро компании»;
  • k8s-оператор;
  • все облака как навыки;
  • сравнение «Go vs Rust vs Zig» вместо репозитория;
  • бенчмарки на пустом месте без профилировщика и задачи.

Английский: документация и предложения в стандартной библиотеке. Устный — по вакансии.

Пример 1. 90-дневный HTTP-сервис

Сервис коротких ссылок или «задачи команды»: сущность, CRUD, уникальность ключа, счётчик, Postgres, тесты на конфликт ключа, Docker Compose.

  1. Дни 1–15. Модуль, хендлер создания, ошибка 409, таблица.
  2. Дни 16–40. Чтение, список с лимитом, контекст с таймаутом к БД, логирование request id.
  3. Дни 41–65. Миграции, compose, healthcheck, тест гонки на уникальность — хотя бы попытка и комментарий, что получилось.
  4. Дни 66–90. README: запуск, переменные, чего нет. Резюме backend с Go, не «полиглот». Отклики по фильтру языка.

Откликаюсь на junior Go. Собрал сервис коротких ссылок: net/http, PostgreSQL, тесты на конфликт ключа, Docker Compose. Коммерческого стажа нет. На созвоне разберу обработку ошибки БД и контекст. Репозиторий: [ссылка]. Готов к тестовому на Go.

Короткое письмо лучше «изучаю современный язык». Каркас: генератор сопроводительного.

Пример 2. План учёбы

Было. Неделя синтаксиса. Неделя горутин «в вакууме». Неделя gin + grpc + kafka из разных видео. Нет ни одного compose.

Стало. Дни 1–10: язык внутри хендлера. Дни 11–60: БД и тесты. Дни 61–80: Docker и README. Дни 81–90: резюме, проверка резюме, 10–15 откликов туда, где Go в обязательных.

Второй план выглядит скромно и переживает live coding на «напиши хендлер». Первый рассыпается на вопросе про утечку горутины.

Критерии готовности

Сервис стартует у другого человека. Тесты без сети к прод-БД. Вы объясняете, зачем Context в запросе. В skills нет Kubernetes. Заголовок — Go backend / backend developer (Go), не пять языков.

Как описать проект: как описать проекты в резюме. Созвон: свой сервис плюс ошибки, слайсы, «что будет, если забыть закрыть строки БД». Общая подготовка: interview-prep.

Конкурентность и ошибки — то, что спросят вместо «зачем Go»

На созвоне редко ждут лекцию про планировщик. Ждут, что вы не запустите горутину на каждый запрос без лимита и не забудете отменить работу, когда клиент отвалился. В учебном сервисе это выглядит так: Context с таймаутом к БД, defer закрытия rows, лог ошибки с кодом, 503 если база не отвечает, а не panic в хендлере.

Сделайте один осознанный параллельный кусок или наоборот — сознательно последовательный, с комментарием в DECISIONS.md: «не гонял N запросов параллельно, потому что упёрся в лимит соединений». Это сильнее канала из туториала «ping-pong».

Ошибки: не сравнивайте строки текста. Обёртки, %w, errors.Is на своих sentinel, где это правда нужно. В JSON-ответе клиенту — стабильный код, в лог — деталь. Путать эти два слоя — частая junior-ошибка на любом языке, в Go её видно сразу.

Резюме и узкий поиск

Заголовок честный: Go backend. Если junior-вакансий мало, не раздувайте файл Python+Java+Go. Лучше один сильный репозиторий и отклики туда, где язык must-have, плюс роли «Go будет плюсом» без вранья в skills. Как собрать документ: как составить резюме.

Пули: «сервис коротких ссылок, конфликт ключа, Postgres, тесты, Compose». Письмо — ссылка и готовность писать хендлер на созвоне. Шаблон: письмо без опыта. Тестовое часто и есть маленький HTTP-сервис — не приносите gRPC, если не просили. Жанр: тестовое задание.

Смотрите каталог Go и backend-роли с фильтром языка. Если вход совсем узкий, параллельно не начинайте третий язык «для статистики». Усильте README и тесты. Стажировки: стажировка в IT.

Частые вопросы

Стоит ли учить Go «потому что он быстрый»?

Нет. Учите, если вакансии и интерес к этому контуру есть. Скорость языка не закрывает отсутствие проекта. Не используйте рейтинги «язык года» как план карьеры. «Go быстрый» в письме не заменяет 409 на конфликте ключа.

Gin или стандартная библиотека?

Что в целевых вакансиях. Для учёбы net/http полезен, чтобы не бояться Handler. В резюме — то, что в репозитории. Три фреймворка в skills при одном хендлере выглядят как курс.

Нужен ли gRPC на junior?

Только если повторяется в объявлениях. Иначе лишний контур. REST достаточен для входа. Protobuf без сервиса — не навык.

Как быть с маленьким числом junior-вакансий?

Не раздувайте skills. Усильте артефакт. Смотрите стажировки и «Go будет плюсом» в Python/Java командах только если готовы не врать. Параллельно не начинайте третий язык «на всякий случай». Узкий рынок лечится качеством репозитория, не шириной стека.

Сравнивать ли Go с Python в письме?

Нет. Пишите про задачу сервиса. Сравнение языков в сопроводительном выглядит как форум, не как отклик. Рекрутеру нужен конфликт ключа и тест, не бенчмарк блога.

Когда смотреть DevOps-роли с Go?

Когда есть Linux, Docker, кусок автоматизации, не только «написал хендлер». Иначе это другая карта: как стать DevOps-инженером. Один HTTP-сервис не делает вас SRE.

Что сделать сейчас

Поставьте Go, опишите одну сущность и конфликт уникальности в БД. Не начинайте с бенчмарков. Доведите compose и тесты. Затем резюме под язык и поиск в каталоге Go-вакансий.

Карта без сервиса — конспект Tour. Работа начинается, когда рекрутер может запустить ваш бинарь в Docker и спросить про ошибку, которую вы сами оставили в issues.

Практический якорь на ближайшие две недели: POST создания ключа, GET редиректа или чтения, 409 на конфликт, тест на гонку хотя бы в комментарии, если полный тест сложен. Не начинайте с graceful shutdown и метрик Prometheus, пока этот контур не зелёный. Когда он зелёный — добавьте таймаут к БД и request id в лог. Это уже похоже на работу, а не на Tour of Go.

Если после 90 дней тишина, не меняйте язык. Проверьте: поднимается ли compose у другого человека, не слишком ли широкий заголовок резюме, не откликаетесь ли вы на middle с Kubernetes. Узкий поиск по Go-вакансиям плюс сильный README бьёт третий язык «для статистики». Файл перед рассылкой — через cv-review.

Откликаюсь на junior Go. HTTP-сервис с Postgres: создание ключа, 409 на конфликт, тесты, Compose. Коммерческого стажа нет. Могу написать хендлер на созвоне и разобрать закрытие rows. Репозиторий: [ссылка]. Готов к тестовому.