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–15. Модуль, хендлер создания, ошибка 409, таблица.
- Дни 16–40. Чтение, список с лимитом, контекст с таймаутом к БД, логирование request id.
- Дни 41–65. Миграции, compose, healthcheck, тест гонки на уникальность — хотя бы попытка и комментарий, что получилось.
- Дни 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. Репозиторий: [ссылка]. Готов к тестовому.