Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Package http

Пакет http предоставляет инструменты для создания и управления HTTP-сервером с поддержкой middleware, обработки запросов и гибкой настройки. Интегрируется с системой логирования и обработки ошибок.

Types

Server

Структура Server управляет жизненным циклом HTTP-сервера, включая запуск, остановку и динамическое обновление обработчиков.

Methods:

NewServer(logger log.Logger, opts ...ServerOption) *Server

Конструктор сервера. Дополнительно принимает опции:

  • WithServer(server *http.Server) ServerOption – использование объекта предварительно настроенного HTTP-сервера из стандартной библиотеки net/http.

(s *Server) Upgrade(handler http.Handler)

Атомарно заменить текущий обработчик запросов на новый.

(s *Server) ListenAndServe(address string) error

Запустить сервер на указанном адресе.

(s *Server) Serve(listener net.Listener) error

Запустить сервер на существующем listener.

(s *Server) Shutdown(ctx context.Context) error

Остановить сервер, завершив все активные соединения.

Usage

Default usage flow

package main

import (
	"context"
	"log"
	"net/http"

	http2 "github.com/txix-open/isp-kit/http"
	log2 "github.com/txix-open/isp-kit/log"
	"github.com/txix-open/isp-kit/shutdown"
)

func main() {
	logger, err := log2.New()
	if err != nil {
		log.Fatal(err)
	}

	srv := http2.NewServer(logger)
	mux := http.NewServeMux()
	mux.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
		_, _ = w.Write([]byte("hello world!!"))
	})

	srv.Upgrade(mux)

	shutdown.On(func() { /* waiting for SIGINT & SIGTERM signals */
		log.Println("shutting down...")
		_ = srv.Shutdown(context.Background())
		log.Println("shutdown completed")
	})

	err = srv.ListenAndServe(":8080")
	if err != nil {
		log.Fatal(err)
	}
}