/
main.go
112 lines (93 loc) · 2.31 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package main
import (
"fmt"
"os"
"github.com/urfave/cli"
"golang.org/x/sync/errgroup"
"github.com/moocss/chi-webserver/src/app"
"github.com/moocss/chi-webserver/src/config"
"github.com/moocss/chi-webserver/src/dao"
"github.com/moocss/chi-webserver/src/pkg/log"
"github.com/moocss/chi-webserver/src/pkg/version"
"github.com/moocss/chi-webserver/src/service"
)
var usageStr = `
___.
__ _ __ ____\_ |__ ______ ______________ __ ___________
\ \/ \/ // __ \| __ \ / ___// __ \_ __ \ \/ // __ \_ __ \
\ /\ ___/| \_\ \\___ \\ ___/| | \/\ /\ ___/| | \/
\/\_/ \___ >___ /____ >\___ >__| \_/ \___ >__|
\/ \/ \/ \/ \/
`
var flags = []cli.Flag{
cli.BoolFlag{
EnvVar: "WEBSERVER_DEBUG",
Name: "debug",
Usage: "enable app debug mode",
},
cli.StringFlag{
EnvVar: "WEBSERVER_CONFING",
Name: "config, c",
Usage: "set config file",
},
}
func start(c *cli.Context) error {
var g errgroup.Group
// 设置默认配置
cfg, err := config.Init(c.String("c"))
if err != nil {
log.Infof("Load yaml config file error: '%v'", err)
os.Exit(-1)
}
if c.Bool("debug") {
cfg.Core.Mode = "dev"
} else {
cfg.Core.Mode = "prod"
}
// 创建数据库业务相关处理
dao := dao.New(cfg)
// 创建封装好的业务服务
svc := service.New(cfg, dao)
// 创建后台服务
app := app.New(cfg, dao, svc)
// 初始化日志服务
app.InitLog()
// 初始化邮件服务
// app.InitMail()
g.Go(func() error {
// 启动服务
return app.RunHTTPServer()
})
g.Go(func() error {
// 健康检查
return app.PingServer()
})
if err := g.Wait(); err != nil {
log.Errorf("接口服务停止了:%v", err)
}
return g.Wait()
}
func run() {
app := cli.NewApp()
app.Name = "webserver"
app.Version = version.Info.String() // version.Version.String()
app.Usage = "Golang接口服务器"
app.UsageText = usageStr
app.Action = start
app.Flags = flags
app.Before = func(c *cli.Context) error {
fmt.Fprintf(c.App.Writer, "brace for impact\n")
return nil
}
app.After = func(c *cli.Context) error {
fmt.Fprintf(c.App.Writer, "did we lose anyone?\n")
return nil
}
if err := app.Run(os.Args); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
func main() {
run()
}