package app import ( "common/discover" "common/log" "fmt" "gateway/config" "github.com/judwhite/go-svc" ) type Program struct { moduleList []Module // 模块列表 } type Module interface { Init() error Start() error Stop() error } func (p *Program) Init(_ svc.Environment) error { p.moduleList = append(p.moduleList, &ModuleBase{}) p.moduleList = append(p.moduleList, &ModuleDB{}) p.moduleList = append(p.moduleList, &ModulePrometheus{}) p.moduleList = append(p.moduleList, &ModuleWebServer{}) p.moduleList = append(p.moduleList, &ModuleWebsocketServer{}) p.moduleList = append(p.moduleList, &ModuleGrpcServer{}) for _, module := range p.moduleList { if err := module.Init(); err != nil { return err } } log.Infof(fmt.Sprintf("%v Init successful...", config.Get().App.Name)) return nil } func (p *Program) Start() error { for _, module := range p.moduleList { if err := module.Start(); err != nil { return err } } discover.Listen() log.Infof(fmt.Sprintf("%v Start successful...", config.Get().App.Name)) return nil } func (p *Program) Stop() error { discover.Close() for i := len(p.moduleList) - 1; i >= 0; i-- { module := p.moduleList[i] if err := module.Stop(); err != nil { log.Errorf("module stop error: %v", err) } } log.Infof(fmt.Sprintf("%v Stop successful...", config.Get().App.Name)) return nil }