Go使用cobra、gin、gorm搭建web服务程序(一)

框架简介

cobra: 官方文档

Apps 框架,cobra是一个提供简单接口来创建强大的现代CLI界面的库类似git & git tools,cobra也是一个应用程序,它会生成你的应用程序的脚手架来快速开发基于cobra的应用程序。

gin: GitHub地址

Gin是一个用Go(Golang)编写的web框架。它采用了类似马提尼的API,由于httprouter。

gorm: 官方文档

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
 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值