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

Функция http.ListenAndServe

Функция http.ListenAndServe запускает HTTP-сервер, который прослушивает входящие запросы на указанном адресе и порту. В первый параметр функция принимает строку с адресом и портом в формате "host:port", во второй параметр — обработчик запросов, реализующий интерфейс http.Handler. Если адрес не указан, используется ":80".

Синтаксис

err := http.ListenAndServe(addr string, handler http.Handler) error

Пример простого сервера

Запустим сервер, который обрабатывает все запросы одним обработчиком:

package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") }) err := http.ListenAndServe(":8080", nil) if err != nil { fmt.Println("Server error:", err) } }

Результат выполнения кода:

// при запросе http://localhost:8080/ "Hello, World!"

Пример с пользовательским обработчиком

Передадим в функцию собственный обработчик, реализующий интерфейс http.Handler:

package main import ( "fmt" "net/http" ) type MyHandler struct{} func (h MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Custom handler response") } func main() { handler := MyHandler{} err := http.ListenAndServe(":8080", handler) if err != nil { fmt.Println("Server error:", err) } }

Результат выполнения кода:

// при запросе http://localhost:8080/ "Custom handler response"

Пример обработки разных маршрутов

Используем http.ServeMux для обработки разных путей:

package main import ( "fmt" "net/http" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Home page") }) mux.HandleFunc("/about", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "About page") }) err := http.ListenAndServe(":8080", mux) if err != nil { fmt.Println("Server error:", err) } }

Результат выполнения кода:

// при запросе http://localhost:8080/ "Home page" // при запросе http://localhost:8080/about "About page"

Пример с обработкой ошибок

Функция возвращает ошибку, если сервер не удалось запустить. Обработаем возможные ошибки:

package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Server is running") }) log.Println("Starting server on port 8080...") err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatalf("Failed to start server: %v", err) } }

Результат выполнения кода:

// при успешном запуске "2024/01/01 12:00:00 Starting server on port 8080..." // при ошибке (например, порт уже занят) "2024/01/01 12:00:00 Failed to start server: listen tcp :8080: bind: address already in use"

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

  • функцию http.ListenAndServeTLS,
    которая запускает HTTPS-сервер с TLS-шифрованием
  • функцию Server.ListenAndServe,
    которая запускает сервер с более гибкими настройками
  • функцию http.HandleFunc,
    которая регистрирует обработчик для указанного маршрута
  • функцию http.ServeMux,
    которая используется для маршрутизации запросов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить