/
cloudservices
/
auth-service
Обзор
Документация
Войти
/
cloudservices
/
auth-service
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
pkg/xhttp/server.go
80 строк
1 KB
Ivan Shibkikh
move http server to xhttp
27 июл 2026, 21:56
27 июл 2026, 21:56
1fb71b8
Код
Авторство
О чём код?
package xhttp import ( "context" "log/slog" "net" "net/http" "time" ) type Server struct { server *http.Server cfg Config logger *slog.Logger } func NewServer(cfg Config, logger *slog.Logger, handler http.Handler) *Server { return &Server{ cfg: cfg, logger: logger, server: &http.Server{ Addr: cfg.Addr, Handler: handler, ReadTimeout: cfg.ReadTimeout, ReadHeaderTimeout: cfg.ReadHeaderTimeout, WriteTimeout: cfg.WriteTimeout, IdleTimeout: cfg.IdleTimeout, MaxHeaderBytes: cfg.MaxHeaderBytes, ErrorLog: slog.NewLogLogger(logger.Handler(), slog.LevelWarn), }, } } func (s *Server) Run(ctx context.Context) error { addr := s.cfg.Addr logger := s.logger tlsConfig, err := NewTLSConfig(s.cfg.TLS) if err != nil { return err } s.server.TLSConfig = tlsConfig l, err := net.Listen("tcp", addr) if err != nil { return err } logger.Info("http server started", "addr", addr) errorCh := make(chan error, 1) go func() { defer close(errorCh) var err error if s.cfg.TLS.Enabled { err = s.server.ServeTLS(l, "", "") } else { err = s.server.Serve(l) } if err != nil && err != http.ErrServerClosed { errorCh <- err } }() select { case err := <-errorCh: return err case <-ctx.Done(): shutdownCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() return s.server.Shutdown(shutdownCtx) } }