go语言命令行工具 go语言命令行参数( 四 )


程序员新视界:分享有趣、有料的程序员话题,每天进步一点点 。
Go语言命令行利器cobra使用教程cobra是一个提供简单接口来创建强大的现代CLI界面的库类似gitgit tools,cobra也是一个应用程序,它会生成你的应用程序的脚手架来快速开发基于cobra的应用程序
cobra提供:
cobra建立在命令、参数、标志的结构之上
commands代表动作,args是事物 , flags是动作的修饰符
最好的应用程序在使用时读起来就像句子 , 因此,用户直观地知道如何与它们交互
模式如下:APPNAME VERB NOUN --ADJECTIVE. or APPNAME COMMAND ARG --FLAG(APPNAME 动词 名词 形容词 或者 APPNAME 命令 参数 标志)
一些真实世界的好例子可以更好地说明这一点
kubectl 命令更能体现APPNAME 动词 名词 形容词
如下的例子,server 是command,port是flag
这个命令中,我们告诉git 克隆url
命令是应用程序的中心点 , 应用程序支持的每一个交互都包含在一个命令中,命令可以有子命令,也可以运行操作
在上面的例子中,server是命令
更多关于cobra.Command
flag是一种修改命令行为的方式,cobra支持完全兼容POSIX标志,也支持go flag package,cobra可以定义到子命令上的标志,也可以仅对该命令可用的标志
在上面的命令中 , port是标志
标志的功能由 pflag library 提供 , pflag library是flag标准库的一个分支,在添加POSIX兼容性的同时维护相同的接口 。
使用cobra很简单,首先,使用go get按照最新版本的库,这个命令会安装cobra可执行程序以及库和依赖项
下一步,引入cobra到应用程序中
虽然欢迎您提供自己的组织,但通常基于Cobra的应用程序将遵循以下组织结构:
在Cobra应用程序中 , main.go文件通常非常简单 。它有一个目的:初始化Cobra 。
使用cobra生成器
cobra提供了程序用来创建你的应用程序然后添加你想添加的命令,这是将cobra引入应用程序最简单的方式
这儿 你可以发现关于cobra的更多信息
要手动实现cobra,需要创建一个main.go 和rootCmd文件,可以根据需要提供其他命令
Cobra不需要任何特殊的构造器 。只需创建命令 。
理想情况下 , 您可以将其放在app/cmd/root.go中:
在init()函数中定义标志和处理配置
例子如下 , cmd/root.go:
创建main.go
使用root命令,您需要让主函数执行它 。为清楚起见,Execute应该在根目录下运行,尽管它可以在任何命令上调用 。
在Cobra应用程序中,main.go文件通常非常简单 。它有一个目的:初始化Cobra 。
可以定义其他命令,通常每个命令在cmd/目录中都有自己的文件 。
如果要创建版本命令 , 可以创建cmd/version.go并用以下内容填充它:
如果希望将错误返回给命令的调用者,可以使用RunE 。
然后可以在execute函数调用中捕获错误 。
标志提供修饰符来控制操作命令的操作方式 。
由于标志是在不同的位置定义和使用的,因此我们需要在外部定义一个具有正确作用域的变量来分配要使用的标志 。
有两种不同的方法来分配标志 。
标志可以是“持久”的,这意味着该标志将可用于分配给它的命令以及该命令下的每个命令 。对于全局标志,在根上指定一个标志作为持久标志 。
也可以在本地分配一个标志,该标志只应用于该特定命令 。
默认情况下,Cobra只解析目标命令上的本地标志,而忽略父命令上的任何本地标志 。通过启用Command.TraverseChildren , Cobra将在执行目标命令之前解析每个命令上的本地标志 。

推荐阅读