package main import ( "flag" "log" "os" "os/signal" "syscall" "giter.top/smart/pkg/config" ) var configPath string func init() { flag.StringVar(&configPath, "conf", "configs/local.yml", "config file path") } func main() { flag.Parse() // load config config, err := config.Load(configPath) if err != nil { log.Fatalf("load config failed: %v", err) } // initialize server servers, err := InitializeServer(config) if err != nil || len(servers) == 0 { panic(err) } // 启动 for _, srv := range servers { s := srv // 避免闭包问题,若需要 go func() { if err := s.Run(); err != nil { log.Printf("server stopped: %v", err) } }() } // 阻塞直到收到退出信号 quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit // 再依次 Stop / Shutdown }