func()

in internal/service/server.go [81:108]


func (s *Server) Serve() {
	mux := http.NewServeMux()
	mux.HandleFunc("/", s.handleRequest)
	server := &http.Server{
		Handler:      mux,
		ReadTimeout:  defaultRequestTimeout,
		WriteTimeout: defaultRequestTimeout,
	}
	go func() {
		s.loggerWrapper.Info("server listening on: %s", s.listener.Addr().String())
		if err := server.Serve(s.listener); err != nil {
			s.loggerWrapper.Error("server listening err: %v", err)
			os.Exit(1)
		}
	}()

	// 监听中断信号以优雅地关闭服务器
	signals := make(chan os.Signal, 1)
	signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)
	<-signals
	s.loggerWrapper.Info("shutting down the server")
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	if err := server.Shutdown(ctx); err != nil {
		s.loggerWrapper.Error("server shutdown Failed :%v", err)
	}
	s.loggerWrapper.Info("server exiting")
}