Все главы учебника
Содержание учебника
Глава 01 / Бесплатный backend-путь

От первой программы к проверяемой функции

25 мин чтенияКонтент v0.8.0

Один проект на весь путь

Вы напишете сервис фоновых заданий. Клиент отправляет текст, сервер выдаёт номер задания, а обработчик возвращает текст в верхнем регистре и число слов. Сначала обработаем одну строку обычной функцией. Затем добавим HTTP, несколько обработчиков, восстановление после перезапуска, повторы и измерения под нагрузкой.

Все восемь этапов, стартовый проект и эталон доступны бесплатно. Нужны компьютер, редактор, терминал и Go 1.25; для скачивания нужен интернет. Облако, Docker, платные API и опыт коммерческой разработки не требуются. Время в начале главы относится к чтению: практика может занять несколько подходов. Это учебный сервис для локального запуска; готовность к работе с реальными данными отдельно проверяют по требованиям конкретной системы.

Если вы раньше не программировали

Пройдите «Основы Go» по порядку: первая программа, переменные, условия и циклы, функции, указатели, коллекции, структуры, интерфейсы, ошибки, обобщения, пакеты, модули и первый тест, введение в горутины. Упражнение на обобщения можно отложить: в этом проекте оно не понадобится.

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

Подготовьте рабочую папку

Скачайте стартовый проект, распакуйте его в отдельную папку и откройте её в редакторе. В терминале перейдите в папку, содержащую go.mod. Например:

go version
cd "путь к папке/backend-path-starter"
go test ./... -run '^TestStage01' -count=1

Замените путь своим; кавычки позволяют использовать пробелы в имени папки. В Windows эти команды можно выполнить в PowerShell. go.mod уже есть в архиве: второй go mod init здесь не нужен. В собственном пустом проекте модуль создают командой go mod init example.com/go-study, как в основном курсе.

Стартовый код содержит объявления и заглушки TODO. Он должен компилироваться, но тест текущего этапа сначала падает. Не запускайте все будущие этапы как критерий сегодняшней работы: они проверяют функции, которые вы ещё не написали. Редактируйте исходники, а не ожидаемые значения проверок.

Напишите Analyze

Откройте internal/jobs/jobs.go: пакет jobs содержит Analyze(text) и структуру Result. Точка входа сервера находится отдельно, в cmd/server/main.go. Не переносите эти объявления в main: сервер уже импортирует пакет обработки. Поле Text содержит strings.ToUpper(strings.TrimSpace(text)), а Words — длину strings.Fields(text). Словом здесь считается последовательность символов между пробельными разделителями: знаки препинания отдельно не очищаются. Это договор функции, а не универсальный лингвистический анализатор.

Для входа " hello go " результат должен содержать Text: "HELLO GO" и Words: 2. Пробелы внутри текста сохраняются, хотя подсчёт слов их группирует. Для пустой строки и строки из пробелов получается пустой текст и ноль слов.

Напишите реализацию и собственный табличный тест минимум на эти три случая. Добавьте файл internal/jobs/own_test.go, начните его с package jobs, подключите testing и назовите тест, например, TestStage01OwnAnalyze(t *testing.T). Внутри этого пакета вызывайте Analyze без префикса. В дальнейшем начинайте имена собственных тестов с номера текущего этапа (TestStage02... и так далее): тогда команды главы запускают и их. Файл с суффиксом _test.go нужен для тестирования, в сервер он не включается. Объявления функций и типов размещайте вне main; вызовы, циклы и присваивания — внутри функций. Стандартные пакеты подключаются через import, устанавливать библиотеку strings отдельно не нужно.

Проверьте

go test ./... -run '^TestStage01' -count=1
go build ./...

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

Частые ошибки: считать пробелы вместо слов; удалить все внутренние пробелы; запускать команду из родительской папки без go.mod; добавить второй main вместо изменения функции. Сначала исправляйте первую ошибку компилятора — остальные могут быть её следствием.

Когда идти дальше

Объясните без запуска, что вернёт функция для "Go\nHTTP" и почему "hello, go!" содержит два слова. Ответы: Text равен "GO\nHTTP", число слов — два; запятая и восклицательный знак остаются частью слов.

Тест этапа проверяет поведение функции. Он не проверяет, что вы поняли структуры, функции и модуль. Если можете объяснить свой код и самостоятельно добавить случай, переходите к HTTP API.

Самопроверка этапа

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

Что выполнено

Для завершения отметьте все критерии и добавьте объяснение.