美文网首页
2022-04-11 go命令行库cobra-cli

2022-04-11 go命令行库cobra-cli

作者: 0619f9023a02 | 来源:发表于2022-04-12 11:21 被阅读0次

一、基本概念

cobra-cli 库是 golang 的一个开源第三方库,能够快速便捷的建立命令行应用程序。

优势:cobra-cli 可以快速建立CLI程序,使我们更专注于命令需要处理的具体的业务逻辑。

cobra-cli由三部分构成:commands,arguments 和 flags

commands:表示要执行的动作。每一个 command 表示应用程序的一个动作。每个命令可以包含子命令。

arguments:给动作传入的参数。

flags:表示动作的行为。可以设置执行动作的行为。flags 包括两种:对某个命令生效和对所有命令生效。

二、安装方法

go install github.com/spf13/cobra-cli@latest

三、使用方法

1.创建项目文件夹,比如在$GOPATH/src下面创建cobraCliDemo项目文件夹

2.在项目文件夹里面执行 go mod init <MODNAME>,比如go mod init cobraCliDemo

3.执行cobra-cli init

创建成功后项目目录如下:

3.1、root.go代码如下:

root.go代码中有一个rootCmd变量:

Use: 命令。

Short: 命令的简短描述。

Long: 命令的详细描述,在帮助命令,如[appName] -h或者[appName] [command] -h时会显示此程序和此命令的字符串。

Run: 命令执行入口,函数主要写在这个模块中。

3.2、main.go代码如下:

4、运行go build main.go,然后执行./main

四、给项目添加命令

1、项目添加命令

比如在项目目录下面即main.go目录下面执行下面命令

(1)、cobra-cli add serve:创建server命令

(2)、cobra-cli add config:创建config命令

(3)、cobra-cli add create -p 'configCmd':在configCmd命令下面创建create子命令create,即嵌套命令创建方式 cobra-ci add 子命令名字 -p  "父命令Cmd"

代码如下:

serve.go config.go create.go

(4) 编译执行:go build main.go,然后执行./main

config,serve为我们刚才创建的命令,执行./main serve,./main config进行调用

2、为command(命令)添加选项(flags)

flags用来控制命令的具体行为分为本地(local) flags和全局(persistent) flags两类。

(1)全局选项persistent flags

对于 persistent 类型的选项,既可以设置给该 Command,又可以设置给该 Command 的子 Command。

a、使用PersistentFlags().String添加flags

在root.go定义一个全局变量var foo *string,然后在root.go的init里面添加:

foo =rootCmd.PersistentFlags().String("foo","defaultFo","A help for foo")

执行go run main.go serve --foo fo,fo被赋值给foo;如果go run main.go serve,默认的defaultFo被赋值给foo,由此可见在父命令rootCmd定义的--foo全局flags在子命令serve里面也可以用,同理在子命令config和create里也可用,调用方式:go run main.go config --foo f,go run main.go config create --foo f。

b、使用PersistentFlags().StringVar添加flags

在root.go定义一个全局变量var print string,然后在root.go的init里面添加:

rootCmd.PersistentFlags().StringVar(&print,"print","defaultPrint","print")

执行go run main.go serve --foo fo --print p,fo被赋值给foo,p被赋值给print;如果go run main.go serve,默认的defaultFo被赋值给foo,defaultPrint赋值给print,由此可见在父命令rootCmd定义的--print全局flags在子命令serve里面也可以用,同理在子命令config和create里也可用,调用方式:go run main.go config --foo fo --print p,go run main.go config create --foo fo --print p。

c、PersistentFlags().BoolVarP添加flags

在root.go定义一个全局变量var show string,然后在root.go的init里面添加:

// 下面定义了一个Flag show,show默认为false, 有两种调用方式--show\-w,命令后面接了show则上面定义的show变量就会变成true

rootCmd.PersistentFlags().BoolVarP(&show,"show","w",false,"show")

执行go run main.go serve --foo fo --print p -w,fo被赋值给foo,p被赋值给print,show为true;如果go run main.go serve,默认的defaultFo被赋值给foo,defaultPrint赋值给print,show为false,由此可见在父命令rootCmd定义的--w/--show全局flags在子命令serve里面也可以用,同理在子命令config和create里也可用,调用方式:go run main.go config --foo fo --print p -w ,go run main.go config create --foo fo --print p -w。

运行go run main.go serve -h可以看到命令flags使用方式。

(2)本地选项local flags

local 类型的选项只能设置给指定的 Command。

同理在serve.go的init添加下面代码设置本地flags。

foo2 =serveCmd.Flags().String("foo2","fo2","help for foo2")

serveCmd.PersistentFlags().StringVar(&print2,"print2","defaultPrint2","print2")

serveCmd.Flags().BoolP("serve","s",false,"Help message for serve")

执行go run main.go serve -h可以看到flags的使用方式:

执行go run main.go serve -s或go run main.go serve --serve,serve命令被调用,输出:

serve called foo: rr

serve called print: defaultPrint

serve called show: false

serve called foo2: fo2

serve.go serveCmd代码如下:

3、获取命令行参数

MinimumNArgs(int) 当参数数目低于配置的最小参数个数时报错 

 MaximumNArgs(int) 当参数数目大于配置的最大参数个数时报错 

 ExactArgs(int) 如果参数数目不是配置的参数个数时报错

NoArgs            没有参数则报错 

执行cobra-cli add path添加path命令 ,设置该命令需要且仅需要一个参数,并在Run方法中取出参数 ,代码如下:

然后执行go run main.go path /bin,输出/bin

代码下载:git@github.com:steven2008/go-cobra-cli.git

相关文章

  • 2022-04-11 go命令行库cobra-cli

    一、基本概念 cobra-cli 库是 golang 的一个开源第三方库,能够快速便捷的建立命令行应用程序。 优势...

  • Go的栈空间管理

    栈空间管理的基本逻辑 go语言通过goroutine提供了并发编程支持,goroutine是go运行库的功能,而不...

  • Go语言命令行工具介绍-3

    章节 命令-go build 命令-go run 命令-go get 1.go build 用于编译源码文件、代码...

  • Golang命令

    Go命令教程 (访问密码:kmNYam)Go命令教程 go buildgo build命令用于编译我们指定的源码文...

  • Linux使用SDK时报错can not run mkscard

    首先的解决办法是用命令行运行mkscard 如果缺少运行库则添加运行库 如果显示找不到mkscard , 则执行以...

  • 积累的知识点

    运行库和运行环境 任何一门语言,包括其运行库和运行环境,都不可能创造出操作系统不支持的功能,Go语言也是这样,不管...

  • Go命令

    假如你已安装了golang环境,你可以在命令行执行go命令查看相关的Go语言命令: go env用于打印Go语言的...

  • Golang中的常用命令

    Go命令行有常用的这几个命令: go build 编译包和依赖 go run 编译和运行go程序 go insta...

  • 【命令】go mod

    记录常用的go mod命令 常用命令 查看 GO111MODULE 是否打开go env 打开go modules...

  • go环境变量

    Go语言环境安装完成后,可以使用 go env命令查看环境变量,打开命令终端执行go env命令,输出内容如下: ...

网友评论

      本文标题:2022-04-11 go命令行库cobra-cli

      本文链接:https://www.haomeiwen.com/subject/oerisrtx.html