框架简介
Apps 框架,cobra是一个提供简单接口来创建强大的现代CLI界面的库类似git & git tools,cobra也是一个应用程序,它会生成你的应用程序的脚手架来快速开发基于cobra的应用程序。
Gin是一个用Go(Golang)编写的web框架。它采用了类似马提尼的API,由于httprouter。
The fantastic ORM library for Golang
本章学习使用cobra
开启项目
使用 go module 管理
mkdir goApp && cd goApp
mkdir newApp && cd newApp
go mod init goApp/newApp
cobra init
创建项目结构:
cobra命令
自动创建的rootCommand 是最基础的命令
自定义为:
var rootCmd = &cobra.Command{
Use: "am",
Short: "-v",
SilenceUsage: true,
DisableAutoGenTag: true,
Long: `am`,
Args: func(cmd *cobra.Command, args []string) error {
if len(args) < 1 {
return errors.New("requires at least one arg")
}
return nil
},
}
func init() {
rootCmd.AddCommand(init.StartCmd)
rootCmd.AddCommand(server.StartCmd)
}
//Execute : apply commands
func Execute() {
if err := rootCmd.Execute(); err != nil {
os.Exit(-1)
}
}
主要是做一个参数检查,和子命令的添加
子命令
可以给基础命令新增子命令
这里加两个子命令,一个负责服务器初始化, 一个负责运行
init: 命令参数配置
run: 命令运行
初始化:主要是数据库迁移
var (
conf string
mode string
StartCmd = &cobra.Command{
Use: "init",
Short: "initialize the database",
Run: func(cmd *cobra.Command, args []string) {
run()
},
}
)
func init() {
StartCmd.PersistentFlags().StringVarP(&conf, "conf", "c", "config/settings.yml", "Start server with provided configuration file")
StartCmd.PersistentFlags().StringVarP(&mode, "mode", "m", "dev", "server mode ; eg:dev,test,prod")
}
func run() {
usage := `start init`
fmt.Println(usage)
//1. 读取配置
//2. 初始化数据库链接
//3. 数据库迁移
//4. 数据初始化完成
}
加载配置建议使用 viper
数据库框架 Gorm
服务:
var (
conf string
port string
mode string
StartCmd = &cobra.Command{
Use: "server",
Short: "Start API server",
Example: "server config/settings.yml",
PreRun: func(cmd *cobra.Command, args []string) {
setup()
},
RunE: func(cmd *cobra.Command, args []string) error {
run()
return nil
},
}
)
func init() {
StartCmd.PersistentFlags().StringVarP(&conf, "conf", "c", "config/settings.yml", "Start server with provided configuration file")
StartCmd.PersistentFlags().StringVarP(&port, "port", "p", "8003", "Tcp port server listening on")
StartCmd.PersistentFlags().StringVarP(&mode, "mode", "m", "dev", "server mode ; eg:dev,test,prod")
}
func setup() bool {
// 服务中间件设置
// 初始化配置
// 初始化服务错误码
// 初始化自定义response
// 开启服务初始化设置
return true
}
func run(){
if ok := setup(); !ok {
return
}
//检查其他服务连接: 如 mysql 连接, redis 连接, kafka 连接库
//app.run
}
具体流程自己定义,主要实现参数配置和 命令执行PreRun, RunE
web服务使用gin框架
运行
项目下加上子的配置文件
执行代码初始化服务器
go run main.go init -c config/settings.dev.yml
执行代码运行服务器
go run main.go server -c config/settings.dev.yml