РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1019 of 1593 menu

Интерфейс http.ResponseWriter

Интерфейс http.ResponseWriter является ключевым элементом при разработке HTTP-серверов на Go. Он передается в качестве второго параметра в функции-обработчики и предоставляет методы для управления ответом клиенту. Основные методы интерфейса: Write записывает данные в тело ответа, WriteHeader устанавливает код состояния HTTP, Header возвращает объект для работы с заголовками ответа.

Синтаксис

type ResponseWriter interface { Header() Header Write([]byte) (int, error) WriteHeader(statusCode int) }

Метод WriteHeader

Метод WriteHeader устанавливает код состояния HTTP для ответа. Если метод не вызывать явно, Go автоматически отправляет статус 200 OK при первом вызове Write. Важно: метод должен быть вызван до записи данных в тело ответа.

Пример

Простой обработчик, который возвращает приветствие и устанавливает код статуса 200:

package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("Hello, World!")) } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }

Метод Header

Метод Header возвращает объект типа http.Header, который представляет собой карту заголовков HTTP-ответа. С помощью этого объекта можно устанавливать и изменять заголовки перед отправкой ответа.

Пример

Установка заголовков Content-Type и X-Custom-Header:

package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") w.Header().Set("X-Custom-Header", "CustomValue") w.WriteHeader(http.StatusOK) fmt.Fprintf(w, `{"message": "Hello"}`) } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }

Метод Write

Метод Write принимает срез байтов и записывает его в тело HTTP-ответа. Этот метод автоматически вызывает WriteHeader(200), если статус еще не был установлен. Метод возвращает количество записанных байтов и ошибку.

Пример

Запись HTML-страницы с помощью метода Write:

package main import ( "net/http" ) func htmlHandler(w http.ResponseWriter, r *http.Request) { html := []byte(` <html> <body> <h1>Hello, World!</h1> <p>This is a response</p> </body> </html> `) w.Header().Set("Content-Type", "text/html") w.Write(html) } func main() { http.HandleFunc("/", htmlHandler) http.ListenAndServe(":8080", nil) }

Установка статуса ошибки

Для отправки клиенту статуса ошибки используется метод WriteHeader с соответствующим кодом состояния. После вызова этого метода тело ответа можно записать с помощью метода Write.

Пример

Обработчик, который возвращает статус 404, если ресурс не найден:

package main import ( "fmt" "net/http" ) func notFoundHandler(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNotFound) fmt.Fprintf(w, "404 - Page Not Found") } func main() { http.HandleFunc("/", notFoundHandler) http.ListenAndServe(":8080", nil) }

Смотрите также

  • интерфейс http.Handler,
    который реализует обработку HTTP-запросов
  • функцию http.HandleFunc,
    которая регистрирует функцию-обработчик для маршрута
  • тип http.Header,
    представляющий заголовки HTTP-запроса или ответа
  • структуру http.Request,
    представляющую входящий HTTP-запрос
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить