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  ```