package http import ( "context" "log" "net" "net/http" "os" "time" ) type HttpServer struct { s http.Server } func NewHttpServer(r http.Handler) *HttpServer { return &HttpServer{s: http.Server{ ReadTimeout: 3 * time.Second, WriteTimeout: 3 * time.Second, Handler: r}} } func (s *HttpServer) Start(network, address string) error { listener, err := net.Listen(network, address) if err != nil { return err } if listener.Addr().Network() == "unix" { os.Chmod(address, 0777) } go func() { if err = s.s.Serve(listener); err != nil && err != http.ErrServerClosed { log.Fatalln(err) } }() return nil } func (s *HttpServer) Stop() error { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() if err := s.s.Shutdown(ctx); err != nil { return err } return nil }