Go backend: HTTP, конкурентность и устойчивость сервиса
Для продолжения после базового Go сравните программу с критериями выбора курса микросервисов: HTTP, gRPC, PostgreSQL, Kafka и практика обработки сбоев.
Разборы рассчитаны на знакомство с основами Go. Для каждого примера сначала определите ожидаемый контракт сервиса и сценарий сбоя. Затем проверяйте не только удачный ответ, но и отмену, повтор, закрытие ресурсов и поведение при параллельной работе.
Как пользоваться разборами
Выберите вопрос, совпадающий с вашей задачей. Внутри есть учебный пример, способ проверки и границы применимости. Воспроизведите пример на небольших безопасных данных, затем измените одно условие и сравните результат. Если проблема относится к нескольким этапам, проверяйте их по очереди.
Разборы 1–5
-
Отмена HTTP-запроса в Go: как убедиться, что context дошёл до клиента. Клиент закрыл запрос, но ваш Go-сервис продолжает обращаться к зависимому API.
-
HTTP retry в Go: почему один список кодов не делает повтор безопасным. После сетевой ошибки сервис повторил POST и создал второй заказ.
-
Как оборачивать ошибки в Go и не потерять машинную проверку причины. В лог добавили контекст через fmt.Errorf, но проверка ошибки базы перестала срабатывать.
-
Worker pool на Go: кто закрывает канал и как дождаться обработки. Задачи отправлены в канал, main завершился, и часть работы исчезла.
-
Пагинация Go API: почему новые записи ломают OFFSET и нужен курсор. Пользователь читает вторую страницу списка, а между запросами добавилась новая запись.
Разборы 6–10
-
Общий счётчик в Go: почему обычный плюс не безопасен между goroutine. Несколько обработчиков увеличивают общий счётчик, и итог иногда меньше ожидаемого.
-
Go Decoder.UseNumber: как не округлить большой ID в map[string]any. API получил идентификатор 9007199254740993, а после обработки вернул другое число.
-
Плюс и амперсанд потерялись в URL Go-клиента: как собрать query. Поисковый запрос A&B+C отправили внешнему API склеиванием строк, и сервер получил другие параметры.
-
Go API тормозит при свободном CPU: как проверить очередь пула БД. Процесс почти не использует CPU, но запросы долго ждут перед обращением к базе.
-
Gzip-ответ занял слишком много памяти в Go: где ставить лимит чтения. Небольшой сжатый ответ после распаковки оказался огромным.
Когда переходить к системной программе
Если отдельные статьи показывают повторяющиеся пробелы, сравните программу соответствующего платного курса Latorn со своей подготовкой и задачами. Этот навигатор подготовлен самой платформой. Статьи помогают разобраться с частными вопросами; наличие примера не означает обещания готового промышленного проекта или профессионального результата.
Продолжить на практике
- Микросервисы на Go: HTTP, PostgreSQL, gRPC, Kafka и Docker ↗
От работающего Go API — к взаимодействию сервисов, которому можно доверять. Разберитесь, как проектировать контракты, сохранять согласованность данных и восстанавливать обработку после сбоев. HTTP, PostgreSQL, gRPC, Kafka и Docker — через код и наглядные разборы.
