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 на «напиши хендлер». Первый рассыпается на вопросе про утечку горутины.