Вопрос с собеседования · Go

Как написать HTTP-сервис на стандартной библиотеке Go?

JuniorМодули, тесты и инструменты
Ещё спрашивают так:
  • Как работает net/http?
  • Что такое http.Handler?
Коротко

Обработчик — всё, что реализует http.Handler (метод ServeHTTP(w, r)), чаще — функция func(w http.ResponseWriter, r *http.Request). Маршруты регистрируют в http.ServeMux; с Go 1.22 он понимает метод и параметры пути: mux.HandleFunc("GET /orders/{id}", h), параметр — r.PathValue("id"). JSON — encoding/json: json.NewDecoder(r.Body).Decode(&req) и json.NewEncoder(w).Encode(resp). Каждый запрос обрабатывается в своей горутине — общие данные защищают. Middleware — функция, оборачивающая Handler (логирование, авторизация).

  • Контекст запроса — r.Context(): передавать в базу и внешние вызовы
  • Код ответа — w.WriteHeader до записи тела
  • Тестировать — httptest.NewRecorder и httptest.NewServer

А ещё Фреймворки (chi, gin, echo) удобны, но стандартной библиотеки часто хватает

Подробно

Пример:

mux := http.NewServeMux()
mux.HandleFunc("GET /orders/{id}", func(w http.ResponseWriter, r *http.Request) {
    id := r.PathValue("id")
    o, err := store.Get(r.Context(), id)
    if errors.Is(err, ErrNotFound) {
        http.Error(w, "not found", http.StatusNotFound)
        return
    }
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(o)
})
srv := &http.Server{Addr: ":8080", Handler: logging(mux)}
log.Fatal(srv.ListenAndServe())

Что хотят услышать

  • Handler и HandlerFunc.
  • ServeMux с методами и параметрами (1.22).
  • JSON и коды ответа.
  • Горутина на запрос, контекст, middleware.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓http.Handler и ServeMux; каждый запрос — в своей горутине
  • ✗net/http обрабатывает все запросы последовательно в одной горутине
  • ✗Без стороннего фреймворка в Go нельзя написать HTTP-сервис
  • ✗Код ответа можно задать через WriteHeader и после записи тела

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования