package main import ( "applet/app/db" "context" "errors" "fmt" "log" "net/http" "os" "os/signal" "syscall" "time" "applet/app/cfg" "applet/app/router" ) // 系统初始化 func init() { cfg.InitCfg() // 配置初始化 cfg.InitLog() // 日志初始化 cfg.InitCache() // 缓存初始化 cfg.InitMq() // 队列初始化 cfg.InitEs() //ElasticSearch初始化 if cfg.Debug { // 判断是否是debug if err := db.InitDB(cfg.DB); err != nil { // 主数据库初始化 panic(err) } if err := db.InitImDB(cfg.IMDB); err != nil { // IM主数据库初始化 panic(err) } } fmt.Println("init success") } // @title 蛋蛋星球-管理后台 // @version 1.0 // @description 管理后台接口文档 // @termsOfService http://swagger.io/terms/ // @contact.name dengbiao // @contact.url http://www.swagger.io/support // @contact.email 1239118001@qq.com // @license.name Apache 2.0 // @license.url http://www.apache.org/licenses/LICENSE-2.0.html // @host localhost:4001 // @securityDefinitions.apikey MasterID // @in header // @name MasterID // @BasePath /api func main() { r := router.Init() // 创建路由 srv := &http.Server{ // 设置http服务参数 Addr: cfg.SrvAddr, // 指定ip和端口 Handler: r, // 指定路由 } go func() { // 协程启动监听http服务 fmt.Println("Listening and serving HTTP on " + cfg.SrvAddr) if err := srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { log.Fatalf("listen: %s\n", err) } }() // 退出go守护进程 quit := make(chan os.Signal) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit log.Println("Shutting down server...") ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() if err := srv.Shutdown(ctx); err != nil { log.Fatal("Server forced to shutdown:", err) } log.Println("Server exiting") }