/
t3
/
mock-server
Обзор
Документация
Войти
/
t3
/
mock-server
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
internal/application/server.go
67 строк
1 KB
Ivan
init
02 июл 2026, 17:15
02 июл 2026, 17:15
2882c87
Код
Авторство
О чём код?
package application import ( "context" "crypto/tls" "errors" "log/slog" "net/http" "time" ) type Server struct { httpServer *http.Server } func NewServer(addr string, handler http.Handler, tlsConfig *tls.Config) *Server { return &Server{ httpServer: &http.Server{ Addr: addr, Handler: handler, TLSConfig: tlsConfig, ReadTimeout: 30 * time.Second, ReadHeaderTimeout: 10 * time.Second, IdleTimeout: 10 * time.Minute, WriteTimeout: 30 * time.Second, MaxHeaderBytes: 4096, }, } } func (s *Server) Run(ctx context.Context) error { slog.Info("start http server", "addr", s.httpServer.Addr) errorc := s.startBackground() select { case <-ctx.Done(): return s.shutdown() case err := <-errorc: return err } } func (s *Server) startBackground() chan error { errorc := make(chan error, 1) go func() { defer close(errorc) err := s.serve() if err != nil && !errors.Is(err, http.ErrServerClosed) { errorc <- err } }() return errorc } func (s *Server) serve() error { if s.httpServer.TLSConfig != nil { return s.httpServer.ListenAndServeTLS("", "") } return s.httpServer.ListenAndServe() } func (s *Server) shutdown() error { shutdownCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() return s.httpServer.Shutdown(shutdownCtx) }