github.com/d0ngw/go@v1.1.40/README.md (about) 1 # go 2 Go Toolkit 3 4 ## Inject example 5 ```go 6 import ( 7 "flag" 8 "fmt" 9 "os" 10 11 c "github.com/d0ngw/go/common" 12 "github.com/d0ngw/go/inject" 13 "github.com/d0ngw/go/orm" 14 ) 15 16 // WorkerApp woker服务,适用于后台执行的任务 17 type WorkerApp struct { 18 config c.Configurer 19 modules []*inject.Module 20 env string 21 } 22 23 // NewWorkerApp new http app 24 func NewWorkerApp(config c.Configurer, modules []*inject.Module) *WorkerApp { 25 ret := &WorkerApp{ 26 config: config, 27 modules: modules, 28 } 29 return ret 30 } 31 32 // Usage flag.Usage 33 func (p *WorkerApp) Usage() { 34 fmt.Fprintf(os.Stderr, "\n") 35 fmt.Fprintf(os.Stderr, "usage:%s args...\n", os.Args[0]) 36 fmt.Fprintf(os.Stderr, "\n") 37 flag.PrintDefaults() 38 os.Exit(1) 39 } 40 41 // FlagInit flag的初始化 42 func (p *WorkerApp) FlagInit() { 43 flag.Usage = p.Usage 44 flag.StringVar(&p.env, "env", "dev", "the enviroment") 45 } 46 47 // Run 运行,直到推出 48 func (p *WorkerApp) Run() { 49 flag.Parse() 50 51 injector, err := inject.SetupInjector(p.config, "", p.env, p.modules...) 52 if err != nil { 53 c.Errorf("init injector fail,err:%s", err) 54 p.Usage() 55 } 56 57 if err := injector.Start(nil); err != nil { 58 c.Errorf("Start servcie fail,err:%s", err) 59 os.Exit(1) 60 } 61 62 shutdownHook := c.NewShutdownhook(defaultShutdownHooks...) 63 shutdownHook.AddHook(func() { 64 injector.Stop(nil) 65 }) 66 67 shutdownHook.WaitShutdown() 68 } 69 70 var app *WorkerApp 71 72 func init(){ 73 var module = inject.NewModule() 74 module.Bind(orm.NewSimpleShardDBService(orm.NewMySQLDBPool)) 75 76 app = NewWorkerApp(xxxconfig,[]*inject.Module{module}) 77 app.FlagInit() 78 } 79 80 func main(){ 81 app.Run() 82 } 83 ```