Cobra是Go的CLI框架。它包含一个用于创建强大的现代CLI应用程序的库和一个用于快速生成基于Cobra的应用程序和命令文件的工具。
Cobra建立在命令、参数和标志的结构之上。
命令代表动作,参数是事物,标志是这些动作的修饰符。
最好的应用程序在使用时会读起来像句子。用户将知道如何使用该应用程序,因为他们会自然地理解如何使用它。
要遵循的模式是APPNAME VERB NOUN --ADJECTIVE.或APPNAME COMMAND ARG --FLAG
可以使用Args字段指定位置参数的验证Command。
内置了以下验证器:
定义:持久参数,这意味着该参数将可用于分配给它的命令以及该命令下的每个命令。
定义:当前命令行参数,只适用于此命令
定义:设定命令行必填参数,默认情况下是可选的,所有参数都为非必填。若设定了此方法,则此参数则会变为必填参数,若输入命令时没有输入,则会报错
定义:绑定参数,即从配置文件中读取此参数的值,且使用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的文档
# 启动
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
更多内容请去公众号【老罗分享】获取