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

Метод http.Server.ListenAndServe

Метод http.Server.ListenAndServe запускает HTTP-сервер, привязываясь к адресу и порту, указанным в поле Addr структуры http.Server. Он начинает прослушивать входящие TCP-соединения и обрабатывает каждый запрос с использованием обработчика, заданного в поле Handler.

Метод принимает ноль параметров и возвращает ошибку типа error. Если сервер запускается успешно, метод блокирует выполнение программы до тех пор, пока сервер не будет остановлен. При возникновении критической ошибки (например, порт уже занят) метод возвращает ошибку немедленно.

Синтаксис

err := server.ListenAndServe()

Где server — это экземпляр структуры http.Server с заполненными полями Addr и Handler.

Пример

Создадим простой HTTP-сервер, который на все запросы отвечает строкой "Hello, World!":

package main import ( "fmt" "net/http" ) func main() { server := &http.Server{ Addr: ":8080", Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") }), } err := server.ListenAndServe() if err != nil { fmt.Printf("Server error: %v\n", err) } }

Результат выполнения кода (сервер запущен на порту 8080):

(сервер запущен, вывод отсутствует)

После запуска сервера можно открыть браузер и перейти по адресу http://localhost:8080, чтобы увидеть ответ "Hello, World!".

Пример

Используем метод http.Server.ListenAndServe с настроенным таймаутом и маршрутизатором:

package main import ( "fmt" "net/http" "time" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Welcome to the main page") }) mux.HandleFunc("/about", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "About us") }) server := &http.Server{ Addr: ":8080", Handler: mux, ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, } fmt.Println("Server starting on :8080") err := server.ListenAndServe() if err != nil { fmt.Printf("Server error: %v\n", err) } }

Результат выполнения кода (сервер запущен с таймаутами):

"Server starting on :8080"

Этот пример демонстрирует, как настроить дополнительные параметры сервера, такие как таймауты, и использовать мультиплексор для обработки разных путей.

Пример

Обработаем ошибку, возникающую при запуске сервера на уже занятом порту:

package main import ( "fmt" "net/http" ) func main() { server := &http.Server{ Addr: ":8080", Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Server is running") }), } err := server.ListenAndServe() if err != nil { fmt.Printf("Error starting server: %v\n", err) } }

Результат выполнения кода (если порт 8080 уже занят):

"Error starting server: listen tcp :8080: bind: address already in use"

В этом примере показано, как метод возвращает ошибку, если не удается запустить сервер, например, из-за занятости порта.

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

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