Gin教程--Gin融合Cobra实现命令行(二)

一、Cobra介绍

1.1 概念

Cobra是Go的CLI框架。它包含一个用于创建强大的现代CLI应用程序的库和一个用于快速生成基于Cobra的应用程序和命令文件的工具。

Cobra建立在命令、参数和标志的结构之上。
命令代表动作,参数是事物,标志是这些动作的修饰符。
最好的应用程序在使用时会读起来像句子。用户将知道如何使用该应用程序,因为他们会自然地理解如何使用它。
要遵循的模式是APPNAME VERB NOUN --ADJECTIVE.或APPNAME COMMAND ARG --FLAG

 

1.2 参数介绍

cobra.Command中的参数

Args

可以使用Args字段指定位置参数的验证Command。

内置了以下验证器:

  • NoArgs- 如果有任何位置参数,该命令将报告错误。
  • ArbitraryArgs- 该命令将接受任何参数。
  • OnlyValidArgs- 如果有任何位置参数不在 的字段中,该命令将报告ValidArgs错误Command。
  • MinimumNArgs(int)- 如果没有至少 N 个位置参数,该命令将报告错误。
  • MaximumNArgs(int)- 如果有超过 N 个位置参数,该命令将报告错误。
  • ExactArgs(int)- 如果不完全有 N 个位置参数,该命令将报告错误。
  • ExactValidArgs(int)= 如果不完全有 N 个位置参数,或者如果有任何位置参数ValidArgs不在Command
  • RangeArgs(min, max)- 如果 args 的数量不在预期 args 的最小和最大数量之间,该命令将报告错误。

命令行参数设定

PersistentFlags

定义:持久参数,这意味着该参数将可用于分配给它的命令以及该命令下的每个命令。

Flags

定义:当前命令行参数,只适用于此命令

MarkFlagRequired

定义:设定命令行必填参数,默认情况下是可选的,所有参数都为非必填。若设定了此方法,则此参数则会变为必填参数,若输入命令时没有输入,则会报错

BindPFlag

定义:绑定参数,即从配置文件中读取此参数的值,且使用viper获取配置文件,对参数字段进行绑定

详情可以查看下方提供的官网文档

 
 
 

二、基础操作

拉取cobra包

go get github.com/spf13/cobra

在项目根目录下的cmd文件夹创建cobra.go文件

package cmd

import (
	"fmt"
	"log"
	"os"

	"github.com/spf13/cobra"
)

var rootCmd = &cobra.Command{
	Use:               "111",
	Short:             "-v",
	Long:              `111`,
	Run: func(cmd *cobra.Command, args []string) {
		usageStr := `欢迎,可以使用-h查看命令`
		log.Printf("%s\n", usageStr)
	},
}

func init() {
}

func Execute()  {
	if err := rootCmd.Execute(); err != nil {
		fmt.Println(err)
		os.Exit(-1)
	}
}

修改项目主文件

package main

import (
	"service/cmd"
)

func main()  {
	cmd.Execute()
}

 
 
 

三、创建自己的命令行

在cmd文件夹下,创建文件–genModel.go

package cmd

import (
	"fmt"
	"github.com/spf13/cobra"
	"gorm.io/driver/mysql"
	"gorm.io/gen"
)

var (
	output    string
	database  string
)

var genModelCmd = &cobra.Command{
	Use:   "genModel",
	Short: "",
	Long:  ``,
	Run: func(cmd *cobra.Command, args []string) {
		fmt.Println("--- GenModel 运行 ---")
		fmt.Println(len(args))

		runGen(args)
	},
}

func init() {
	rootCmd.AddCommand(genModelCmd)

	genModelCmd.Flags().StringVarP(&output, "output", "o", "", "output file")
	genModelCmd.Flags().StringVarP(&database, "database", "d", "", "database select")
}

func runGen(args []string){
	for k, v := range args {
		fmt.Println(k)
		fmt.Println(v)
	}

    fmt.Println(database)
    fmt.Println(output)	
}

执行结果:

# 输入命令
go run main.go genModel --output heihei

# 输出结果
--- GenModel 运行 ---
0

heihei

# 输入命令
go run main.go genModel --output heihei aabb ccdd

# 输出结果
--- GenModel 运行 ---
2

heihei
0
aabb
1
ccdd

第一种命令是进行双中线参数的使用方法
第二种命令是输出参数类型的方法

至此,完结
想知晓更详细的操作方法,请查看cobra的文档

需求操作(大家可以想想如何实现)

  1. 使用上面的方案,实现Gin的命令行启动
  2. 支持start、restart、stop以及持久化命令
    命令行为:
# 启动
go run main.go startWeb start

## 启动持久化
go run main.go startWeb start -d

# 重启
go run main.go startWeb restart

## 重启持久化
go run main.go startWeb restart -d

# 关闭杀死当前进程
go run main.go startWeb stop

 
 
 
更多内容请去公众号【老罗分享】获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gin-admin-api是一个基于Gin框架开发的后台管理系统的API接口。Gin框架是一个轻量级的、高性能的Go语言框架,具有路由和中间件的功能,适合用于构建Web应用程序。 gin-admin-api提供了一套完善的API接口,用于实现后台管理系统的各种功能,例如用户管理、角色管理、权限管理、菜单管理、日志管理等。通过这些接口,可以方便地进行用户的注册、登录和认证,管理用户的角色和权限,管理系统的菜单和日志信息。 gin-admin-api的优点之一是高性能。由于采用了Gin框架,它具有快速的路由匹配和中间件处理的能力,能够处理大量的请求,并在高并发的情况下保持稳定性和可靠性。 另一个优点是易于扩展和定制。gin-admin-api使用了模块化的设计,各个功能模块之间松耦合,可以根据实际需求进行灵活的扩展和定制。例如,可以根据业务需求添加新的功能模块,或者修改和优化已有的模块。 此外,gin-admin-api还提供了友好的文档和示例代码,方便开发者理解和使用。它的源代码也是开源的,可以在GitHub上找到,这样可以方便地进行次开发和定制,满足特定的业务需求。 总之,gin-admin-api是一个功能丰富、高性能、易扩展的后台管理系统API接口,大大简化了后台管理系统的开发工作,帮助开发者快速构建稳定、可靠的后台管理系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值