扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
cobra是一个提供简单接口来创建强大的现代CLI界面的库类似git git tools,cobra也是一个应用程序,它会生成你的应用程序的脚手架来快速开发基于cobra的应用程序
成都创新互联长期为成百上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为沈河企业提供专业的网站设计、网站建设,沈河网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
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将在执行目标命令之前解析每个命令上的本地标志。
使用viper绑定标志
在本例中,持久标志author与viper绑定。注意:当用户未提供--author标志时,变量author将不会设置为config中的值。
更多关于 viper的文档
Flags默认是可选的,如果希望命令在未设置标志时报告错误,请根据需要进行标记:
持久性Flags
可以使用命令的Args字段指定位置参数的验证。
内置了以下验证器:
在下面的示例中,我们定义了三个命令。两个是顶级命令,一个(cmdTimes)是顶级命令之一的子命令。在这种情况下,根是不可执行的,这意味着需要一个子命令。这是通过不为“rootCmd”提供“Run”来实现的。
我们只为一个命令定义了一个标志。
有关标志的更多文档,请访问
对于一个更完整的例子更大的应用程序,请检查 Hugo 。
当您有子命令时,Cobra会自动将help命令添加到应用程序中。当用户运行“应用程序帮助”时,将调用此函数。此外,help还支持所有其他命令作为输入。例如,您有一个名为“create”的命令,没有任何附加配置;调用“app help create”时,Cobra将起作用。每个命令都会自动添加“-help”标志。
以下输出由Cobra自动生成。除了命令和标志定义之外,不需要任何东西。
帮助就像其他命令一样。它周围没有特殊的逻辑或行为。事实上,你可以提供你想提供的。
您可以为默认命令提供自己的帮助命令或模板,以用于以下功能:
当用户提供无效的标志或无效的命令时,Cobra通过向用户显示“用法”来响应。
你可以从上面的帮助中认识到这一点。这是因为默认帮助将用法作为其输出的一部分嵌入。
您可以提供自己的使用函数或模板供Cobra使用。与帮助一样,函数和模板也可以通过公共方法重写:
如果在root命令上设置了version字段,Cobra会添加一个顶级的'--version'标志。运行带有“-version”标志的应用程序将使用版本模板将版本打印到标准输出。可以使用cmd.SetVersionTemplate(s string)函数自定义模板。
可以在命令的主运行函数之前或之后运行函数。PersistentPreRun和PreRun函数将在运行之前执行。PersistentPostRun和PostRun将在运行后执行。如果子函数不声明自己的函数,则它们将继承Persistent*Run函数。这些函数按以下顺序运行:
输出:
当发生“未知命令”错误时,Cobra将打印自动建议。这使得Cobra在发生拼写错误时的行为类似于git命令。例如:
基于注册的每个子命令和Levenshtein距离的实现,建议是自动的。匹配最小距离2(忽略大小写)的每个已注册命令都将显示为建议。
如果需要在命令中禁用建议或调整字符串距离,请使用:
or
您还可以使用SuggestFor属性显式设置将为其建议给定命令的名称。这允许对在字符串距离方面不接近的字符串提供建议,但在您的一组命令中是有意义的,并且对于某些您不需要别名的字符串。例子:
Cobra可以基于子命令、标志等生成文档。请在 docs generation文档 中阅读更多关于它的信息。
Cobra可以为以下shell生成shell完成文件:bash、zsh、fish、PowerShell。如果您在命令中添加更多信息,这些补全功能将非常强大和灵活。在 Shell Completions 中阅读更多关于它的信息。
Cobra is released under the Apache 2.0 license. See LICENSE.txt
一个词及物不及物都没有为什么的,这都是语言习惯
go这个东西,表达去、往、到的时候需要加to
表示继续的时候需要加on
表示适合的时候要加for
除此之外还有go after追赶,go by经过等等
但全部都不能直接加宾语
go这个词
go after追求;追逐
go ahead继续下去;开始
go along with赞成;支持;随行
We’ll go along with your suggestion.
go around / round足够分配;绕…而行;传播
There aren't enough computers for the whole grade of students to go round.
计算机不够整个年级学生用的。
Is there food to go round?
食物够分配的吗?
If there are not enough chairs to go round, some people will have to stand.
There are a lot of colds going round.
go back on违背诺言
Don't go back on your word.
可别说了不算数啊!
Go back on a promise
go by时间过去;经过;遵守
A car went by.
2 years went by.
You can't go by what the children say.
你不能照孩子们说的去做。
To go by the rules.
Don’t go by that old map.
go down下降;下沉;下跌
Meat and eggs are going down in price.
肉蛋的价格正在下跌。
The grain crop has gone down this year.
今年的粮食作物产量下降了。
go for去;选择;想要;攻击(用语言)
My wife went for me because I was late for dinner.
When you offer him sweets he goes for the biggest one.
They went for each other in the papers.
他们在报上互相指责。
to go for a job 求职
go in for从事,爱好;参加(竞赛,考试)
I go in for the examination next year.
His brother doesn't go in for sports.
他弟弟没有参加运动的习惯。
Young people should never simply go in for material comforts.
年青人永远也不应一味地追求物质享受。
go into研究;调查;从事
The police are going into the murder case.
To go into business/politics
go off离开;爆炸;食品变坏;断电
The bomb went off with a deafening crash.
The signal pistol went off with a bang.
信号枪砰的一声响了。
This steak has gone off.这牛排坏了。
go on继续进行;发生
What's going on here? 这里发生了什么事?
Go on, I'm listening. 说下去吧,我在听着。
Let's go on!让我们继续做/走/读下去。
Go on with your work. 继续干你的工作。
If you go on like this, you'll make big mistakes some day.
如果你继续这样下去势必有一天要犯大错误。
go out离开 ;熄灭;过时
What a pleasant weather. Why not go out for a walk? 天气多好啊,为什么不出去散散步?
My friends went out to Africa.
我的朋友到非洲旅行去了。
Short skirts went out some time ago.
短裙不久以前才不流行了。
go over浏览,仔细查看,检查,审查
We went over the building.
我们查看了这座大楼。
We must go overthe accounts carefully before we settle them.
在结账之前,我们必须仔细查阅账目。
You must go over the instructions of how it works before you use the micro-wave oven.
在使用微波炉前要先看看它的使用说明。
go through通过;经历(苦难);仔细检查
There is a mistake somewhere, we’ll have to go through the accounts and see where it is.
to gothrough two stages 经历两个阶段
These countries have gone / been through too many wars. 这些国家饱经战火。
The law has gone through Parliament.
议会已经通过了这项法案。
Their plans went through.
他们的计划得到了批准。
You should go through the official channels to get help instead of through private relationship.你应该通过官方渠道而不是通过私人关系寻求帮助。
go up上升,增长;涨价
Prices have gone upagain. 物价又上涨了。
go wrong出毛病;发生故障,走错路
go south 越来越糟糕
太夸张了吧,这不是“去南方”的意思吗?这么简单的词组谁不知道!
不要小看了这么一个简单的词组哦,不信?那就请看下面的句子中,to go south 是什么意思呢?
Ice-cream sales go south since it is nearly winter.
英语中的很多常用词汇的意义随着时代的变迁不断发生变化。比如 to go south,在80年代之前,其用法只限于字面意思,即“去南方”。而到了80年代中后期,这个词汇被广泛用作习语,意思变化层出不穷。起初,to go south 的比喻意义经常被加引号使用,但逐渐地,新的衍生意义就成为了词组本身意义的一部分。在上面的这句句子中,to
go south 的意思是指“(销量)下降”,是不是恍然大悟了?
当我们使用 to go/head south 的比喻义时,其表达的意思通常是指“下降,变坏;数量、质量或价值的减少”,亦指“情况越来越糟糕”。其实,south 一词与“下降、变糟”的联系还要归功于伟大的古希腊地理学家和天文学家托勒密。公元2世纪时,托勒密绘制成了世界地图,他的地球是方的,而且北部在上方,南部在下方。他的地理学理论在15世纪的欧洲得到复兴,并成为所有地图绘制工作必须遵循的标准。从此,去南方(to go to the south)就成了南下(to go down to the south)。
今天,如果翻翻流行杂志的话,会发现 to go south 的比喻义用法比比皆是。如果是某些人 go south,这意味着他们某种程度上让你失望了;如果是股票市场 go south,你将很可能会被套牢;如果运动员 go south,这意味着他或她已经过了巅峰时期;如果是电脑的软硬件 go south,那意味着这些软硬件坏了。go south 是一个非常有表现力的习语,可以非常灵活的用于表述各种带有贬义的情形。
go west[俚]上西天;死;(某计划)失败;(某种物品)被破坏而不能用。
弗里曼先生说,这条成语是在第一次世界大战时产生的;那时伤员以及不在当地埋葬的尸体都从前线向西运送。另一种说法是指太阳从西边落下,以次比喻人的死亡。[例如]Poor John was one of those who went west in the explosion.可怜的约翰是在这次爆炸中魂归西天的人之一。
happy-go-lucky乐天知命,无忧无虑,逍遥自在
这个引喻指人相信命运而生活得愉快。可作为名词、形容词和副词用。做名词时喻乐天知足的人。[例]Yong Jones is a happy-go-lucky lad; he doesn't worry about anything 年轻的琼斯是个乐天知命的小伙子,他什么事也不担忧。这个词
go after追求;追逐
go ahead继续下去;开始
go along with赞成;支持;随行
We’ll go along with your suggestion.
go around / round足够分配;绕…而行;传播
There aren't enough computers for the whole grade of students to go round.
计算机不够整个年级学生用的。
Is there food to go round?
食物够分配的吗?
If there are not enough chairs to go round, some people will have to stand.
There are a lot of colds going round.
go back on违背诺言
Don't go back on your word.
可别说了不算数啊!
Go back on a promise
go by时间过去;经过;遵守
A car went by.
2 years went by.
You can't go by what the children say.
你不能照孩子们说的去做。
To go by the rules.
Don’t go by that old map.
go down下降;下沉;下跌
Meat and eggs are going down in price.
肉蛋的价格正在下跌。
The grain crop has gone down this year.
今年的粮食作物产量下降了。
go for去;选择;想要;攻击(用语言)
My wife went for me because I was late for dinner.
When you offer him sweets he goes for the biggest one.
They went for each other in the papers.
他们在报上互相指责。
to go for a job 求职
go in for从事,爱好;参加(竞赛,考试)
I go in for the examination next year.
His brother doesn't go in for sports.
他弟弟没有参加运动的习惯。
Young people should never simply go in for material comforts.
年青人永远也不应一味地追求物质享受。
go into研究;调查;从事
The police are going into the murder case.
To go into business/politics
go off离开;爆炸;食品变坏;断电
The bomb went off with a deafening crash.
The signal pistol went off with a bang.
信号枪砰的一声响了。
This steak has gone off.这牛排坏了。
go on继续进行;发生
What's going on here? 这里发生了什么事?
Go on, I'm listening. 说下去吧,我在听着。
Let's go on!让我们继续做/走/读下去。
Go on with your work. 继续干你的工作。
If you go on like this, you'll make big mistakes some day.
如果你继续这样下去势必有一天要犯大错误。
go out离开 ;熄灭;过时
What a pleasant weather. Why not go out for a walk? 天气多好啊,为什么不出去散散步?
My friends went out to Africa.
我的朋友到非洲旅行去了。
Short skirts went out some time ago.
短裙不久以前才不流行了。
go over浏览,仔细查看,检查,审查
We went over the building.
我们查看了这座大楼。
We must go overthe accounts carefully before we settle them.
在结账之前,我们必须仔细查阅账目。
You must go over the instructions of how it works before you use the micro-wave oven.
在使用微波炉前要先看看它的使用说明。
go through通过;经历(苦难);仔细检查
There is a mistake somewhere, we’ll have to go through the accounts and see where it is.
to gothrough two stages 经历两个阶段
These countries have gone / been through too many wars. 这些国家饱经战火。
The law has gone through Parliament.
议会已经通过了这项法案。
Their plans went through.
他们的计划得到了批准。
You should go through the official channels to get help instead of through private relationship.你应该通过官方渠道而不是通过私人关系寻求帮助。
go up上升,增长;涨价
Prices have gone upagain. 物价又上涨了。
go wrong出毛病;发生故障,走错路
go south 越来越糟糕
太夸张了吧,这不是“去南方”的意思吗?这么简单的词组谁不知道!
不要小看了这么一个简单的词组哦,不信?那就请看下面的句子中,to go south 是什么意思呢?
Ice-cream sales go south since it is nearly winter.
英语中的很多常用词汇的意义随着时代的变迁不断发生变化。比如 to go south,在80年代之前,其用法只限于字面意思,即“去南方”。而到了80年代中后期,这个词汇被广泛用作习语,意思变化层出不穷。起初,to go south 的比喻意义经常被加引号使用,但逐渐地,新的衍生意义就成为了词组本身意义的一部分。在上面的这句句子中,to
go south 的意思是指“(销量)下降”,是不是恍然大悟了?
当我们使用 to go/head south 的比喻义时,其表达的意思通常是指“下降,变坏;数量、质量或价值的减少”,亦指“情况越来越糟糕”。其实,south 一词与“下降、变糟”的联系还要归功于伟大的古希腊地理学家和天文学家托勒密。公元2世纪时,托勒密绘制成了世界地图,他的地球是方的,而且北部在上方,南部在下方。他的地理学理论在15世纪的欧洲得到复兴,并成为所有地图绘制工作必须遵循的标准。从此,去南方(to go to the south)就成了南下(to go down to the south)。
今天,如果翻翻流行杂志的话,会发现 to go south 的比喻义用法比比皆是。如果是某些人 go south,这意味着他们某种程度上让你失望了;如果是股票市场 go south,你将很可能会被套牢;如果运动员 go south,这意味着他或她已经过了巅峰时期;如果是电脑的软硬件 go south,那意味着这些软硬件坏了。go south 是一个非常有表现力的习语,可以非常灵活的用于表述各种带有贬义的情形。
go west[俚]上西天;死;(某计划)失败;(某种物品)被破坏而不能用。
弗里曼先生说,这条成语是在第一次世界大战时产生的;那时伤员以及不在当地埋葬的尸体都从前线向西运送。另一种说法是指太阳从西边落下,以次比喻人的死亡。[例如]Poor John was one of those who went west in the explosion.可怜的约翰是在这次爆炸中魂归西天的人之一。
happy-go-lucky乐天知命,无忧无虑,逍遥自在
这个引喻指人相信命运而生活得愉快。可作为名词、形容词和副词用。做名词时喻乐天知足的人。[例]Yong Jones is a happy-go-lucky lad; he doesn't worry about anything 年轻的琼斯是个乐天知命的小伙子,他什么事也不担忧。
sapereaude的答案是正确的,陈默的答案有误。并不是所有的不规则变化都是一种变化。go的过去式是went是suppletion的体现,指的是一个单词(go)借用了另一个不同源的单词(wend)的屈折变化形式(went)。罗曼语我不了解,但德语的gehen-ging是强变化的体现,指的是通过改变自己的词根来进行屈折变化(也比如wend-went),并不是使用别的词的屈折变化,所以不是suppletion。因此,说“从go-went是这种变化是绝大部分欧洲语言的普遍状态”是完全错误的归纳。英语减少变格变位也不是去复杂化,是分析化,并不代表英语更简单了。当然这和英语为什么能征服世界更八竿子打不着了。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流