package main import ( "log/slog" "os" "os/signal" "platform/web" "syscall" ) func main() { logger := slog.Default() // 退出信号 shutdown := make(chan os.Signal, 1) signal.Notify(shutdown, syscall.SIGINT, syscall.SIGTERM) // web 服务 app, err := web.New(&web.Config{ Logger: logger, Listen: ":8080", }) if err != nil { logger.Error("Failed to create server", slog.Any("error", err)) return } errCh := make(chan error) defer close(errCh) go func() { err = app.Run() if err != nil { logger.Error("Failed to run server", slog.Any("error", err)) errCh <- err } errCh <- nil }() // 关闭服务 exit := false select { case <-shutdown: logger.Info("Received shutdown signal") app.Stop() exit = true case err := <-errCh: if err != nil { logger.Error("Server error", slog.Any("error", err)) } } if exit { err := <-errCh if err != nil { logger.Error("Server error", slog.Any("error", err)) } } }