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