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

Метод http.Server.Close

Метод http.Server.Close немедленно закрывает все активные соединения сервера. В отличие от метода http.Server.Shutdown, который ожидает завершения обработки запросов, Close прерывает соединения принудительно, не дожидаясь завершения текущих операций. Метод не принимает параметров и возвращает ошибку, если закрытие соединений прошло неудачно.

Синтаксис

err := server.Close()

Пример с немедленным закрытием

Давайте создадим HTTP-сервер и немедленно закроем его с помощью метода Close:

package main import ( "fmt" "net/http" "time" ) func main() { server := &http.Server{ Addr: ":8080", Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Request processed") }), } go func() { time.Sleep(2 * time.Second) err := server.Close() if err != nil { fmt.Println("Close error:", err) } else { fmt.Println("Server closed") } }() err := server.ListenAndServe() if err != nil && err != http.ErrServerClosed { fmt.Println("Server error:", err) } }

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

"Server closed"

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

Давайте обработаем ошибку при закрытии сервера, который не был запущен:

package main import ( "fmt" "net/http" ) func main() { server := &http.Server{ Addr: ":8080", } err := server.Close() if err != nil { fmt.Println("Error closing server:", err) } else { fmt.Println("Server closed successfully") } }

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

"Error closing server: close tcp :8080: use of closed network connection"

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

Давайте закроем сервер прямо из обработчика запроса:

package main import ( "fmt" "net/http" ) func main() { server := &http.Server{ Addr: ":8080", Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Closing server...") go func() { err := server.Close() if err != nil { fmt.Println("Close error:", err) } }() }), } err := server.ListenAndServe() if err != nil && err != http.ErrServerClosed { fmt.Println("Server error:", err) } }

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

"Closing server..."

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

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