💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат и результаты по 6 тематическим шкалам с объяснениями и практическими рекомендациями.
Вопрос 17 из 30
Фрагмент относится к теме «Корректное завершение». Какую правку стоит предложить на ревью, сохранив назначение кода?
Go Корректное завершение: фрагмент на ревью Копировать
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import("context";"net/http";"time")
func stop(s *http.Server){ ctx,cancel:=context.WithTimeout(context.Background(),5*time.Second);defer cancel();_ = s.Shutdown(ctx) }
func main(){}
Назначать уникальные порты через прослушивание `:0`, не менять глобальное окружение параллельно и закрывать серверы через Cleanup.
Снимать профиль блокировок под нагрузкой, проверять длины очередей и не включать дорогой сбор постоянно без оценки.
Перестать принимать трафик, снять готовность, дать запросам срок завершиться и затем принудительно закрыть остаток.
Считать запросы, категории ошибок, гистограмму задержки, очередь и ресурсы зависимостей; связывать с трассировкой через exemplar.
Не запускать скрытую вечную горутину без способа остановки, контекста и наблюдаемой ошибки.
Вопрос 23 из 30
В разделе «Тестирование и наблюдаемость» показан конкретный случай в тесте «HTTP-сервер». Какое правило отделяет верный разбор от правдоподобной догадки?
Go Тестирование и наблюдаемость: проверка контракта Копировать
// Определите правило Go, которое объясняет результат.
package sample
import("net/http";"net/http/httptest";"testing")
func TestH(t *testing.T){ r:=httptest.NewRequest(http.MethodGet,"/",nil); w:=httptest.NewRecorder(); h(w,r); if w.Code!=204{t.Fatal(w.Code)} }
func h(w http.ResponseWriter,r *http.Request){w.WriteHeader(204)}
Каждый middleware тестируют отдельно и в реальном порядке цепочки, включая отсутствие вызова `next`.
Конвейер тестируют на пустом входе, ранней отмене, медленном потребителе и закрытии всех выходов; отдельно считают активные работники.
Панику проверяют в той же горутине через отложенный `recover`, а в рабочем сервисе фиксируют значение и стек.
Обработчики удобно тестировать `httptest.NewRequest` и `ResponseRecorder`, отдельно проверяя статус, заголовки и тело.
Слой данных тестируют на ошибках начала, запроса, сканирования и коммита; отдельно нужен интеграционный тест реальной базы.