




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第玩转Go命令行工具Cobra目录1简介2安装2.1安装Cobra-cli脚手架工具2.2在项目中下载Cobra依赖3使用方式3.1HelloWorld3.2开发自己的Cli命令3.3规则和扩展使用4小总结不知大家有没有在使用Git命令、Linux的yum命令、Go命令、Maven命令的时候感觉到非常的酷,比如你刚刚拿到一个Go的开源项目,初始化时只需要输入gomodtidy进行对依赖的下载,或者是gitclonexxx之后拉下来一个GitHub上的项目,mvnpackage或者gobuild就可以将整合项目打包成一个可执行的文件,当然这些操作现在大多数都能通过可视化的UI界面进行,但是就少了一些韵味,还是使用原生的CLI工具最能体现程序执行的过程,并且真是的生产环境中大多数也只能通过这种命令的方式来进行,因此我们就有必要搞一下这个大蟒蛇工具Cobra。
1简介
GitHub:/spf13/cobra
Cobra是一个用于创建强大的现代CLI应用程序的库。在很多围棋项目中使用,比如Kubernetes,Hugo和GitHubCLI等等。
那么什么是CLI呢,简单来讲就是命令行工具界面,CommandLineInterfaceforbatchscripting的简称,在我们开发中广泛的使用,比如你打开GitBash,输入gitcloneXXX,这个就是操作Git的命令行工具界面。
除此之外,Cobra还提供:
简单的基于子命令的cli:应用服务器,应用获取,等等。完全兼容posix的标志(包括短版本和长版本)嵌套的子命令全局、本地和级联标志命令和标志的自动帮助生成自动识别-h、help等帮助标志。为您的应用程序自动生成shell自动完成(bash,zsh,fish,powershell)为您的应用程序自动生成的手册页命令别名,以便您可以更改而不破坏它们定义自己的帮助、用法等的灵活性。
什么是命令参数标识符?
Cobra是构建在命令、参数和标识符之上的:
Commands表示执行动作Args就是执行参数Flags是这些动作的标识符
基本的执行命令如下所示:
$APPNAMECommandArgs--Flags
$APPNAMECommand--FlagsArgs
2安装
2.1安装Cobra-cli脚手架工具
goinstall/spf13/cobra-cli@latest
下载完成之后会在我们的$GOPATH目录的bin目录下生成一个二进制的文件cobra-cli.exe(Windows下)或cobra-cli(LInux下),如果出现问题,如:
我们可以直接找到$GO_PATH\pkg\mod\\spf13\cobra-cli@v1.3.0目录,直接gobuild自己编译一个二进制文件。
之后一步,为了方便使用我们可以将生成的二进制文件放在环境变量里,让他在任何地方都能使用,步骤过于简单就忽略了哈。
2.2在项目中下载Cobra依赖
goget-u/spf13/cobra@latest
3使用方式
其实在使用方式这一块有两种方法,一种是自己直接写代码,另一种就是使用刚刚我们安装的cobra-cli来生成脚手架代码,我们就在HelloWorld里面将cobra-cli生成代码试一遍。
3.1HelloWorld
首先在项目根目录下打开终端(必须是GoModule项目),然后输入命令cobra-cliinit就会在项目中生成如下代码:
我们看下具体的代码:
main.go
packagemain
import"go-cobra/cmd"
funcmain(){
cmd.Execute()
}
root.go
packagecmd
import(
"os"
"/spf13/cobra"
//rootCmdrepresentsthebasecommandwhencalledwithoutanysubcommands
varrootCmd=cobra.Command{
Use:"go-cobra",
Short:"Abriefdescriptionofyourapplication",
Long:`Alongerdescriptionthatspansmultiplelinesandlikelycontains
examplesandusageofusingyourapplication.Forexample:
CobraisaCLIlibraryforGothatempowersapplications.
Thisapplicationisatooltogeneratetheneededfiles
toquicklycreateaCobraapplication.`,
//Uncommentthefollowinglineifyourbareapplication
//hasanactionassociatedwithit:
//Run:func(cmd*cobra.Command,args[]string){},
//Executeaddsallchildcommandstotherootcommandandsetsflagsappropriately.
//Thisiscalledbymain.main().ItonlyneedstohappenoncetotherootCmd.
funcExecute(){
err:=rootCmd.Execute()
iferr!=nil{
os.Exit(1)
funcinit(){
//Hereyouwilldefineyourflagsandconfigurationsettings.
//Cobrasupportspersistentflags,which,ifdefinedhere,
//willbeglobalforyourapplication.
//rootCmd.PersistentFlags().StringVar(cfgFile,"config","","configfile(defaultis$HOME/.go-cobra.yaml)")
//Cobraalsosupportslocalflags,whichwillonlyrun
//whenthisactioniscalleddirectly.
rootCmd.Flags().BoolP("toggle","t",false,"Helpmessagefortoggle")
我们将root.go里面的代码进行部分修改:
packagecmd
import(
"fmt"
"/spf13/cobra"
"os"
varnamestring
varrootCmd=cobra.Command{
Use:"hello",
Run:func(cmd*cobra.Command,args[]string){
fmt.Println("hello",name)
funcExecute(){
err:=rootCmd.Execute()
iferr!=nil{
os.Exit(1)
funcinit(){
rootCmd.Flags().StringVarP(name,"name","","world","")
测试:
$gobuild
$.\go-cobra.exe--namezs
hellozs
$.\go-cobra.exe
helloworld
3.2开发自己的Cli命令
使用cobra-cli脚手架,或者也可以自己手写如下代码
cobra-cliaddhi
这个时候我们就会发现多了一个文件,当然也可以自己手写代码:
在hi.go文件中代码:
packagecmd
import(
"fmt"
"/spf13/cobra"
var(
ageint
like[]string
addressstring
varhiCmd=cobra.Command{
Use:"hi",
Short:"",
Long:"",
Run:func(cmd*cobra.Command,args[]string){
Print()
funcinit(){
rootCmd.AddCommand(hiCmd)
hiCmd.Flags().StringVarP(name,"name","","world","")
hiCmd.Flags().IntVarP(age,"age","",1,"")
hiCmd.Flags().StringSliceVarP(like,"like","",[]string{},"")
hiCmd.Flags().StringVarP(address,"address","","Beijing","")
funcPrint(){
fmt.Println("name:",name)
fmt.Println("age:",age)
fmt.Println("like:",like)
fmt.Println("address:",address)
测试:
.\go-cobra.exehi--namezs--age100--likeCoding,Running--addressShangHai
name:zs
age:100
like:[CodingRunning]
address:ShangHai
3.3规则和扩展使用
3.3.1我们不难看出规则
新增命令就是自定义cobra.Command
新增标识符就是命令.Flags().xxx
新增的命令都需要在rootCmd中添加,新增的标识符都要在init中添加
3.3.2小扩展
一些常用到的方法:
NoArgs:如果有任何参数,命令行将会报错ArbitraryArgs:命令行将会接收任何参数OnlyValidArgs:如果有如何参数不属于Command的ValidArgs字段,命令行将会报错MinimumNArgs(int):如果参数个数少于N个,命令行将会报错MaximumNArgs(int):如果参数个数多于N个,命令行将会报错ExactArgs(int):如果参数个数不等于N个,命令行将会报错RangeArgs(min,max):如果参数个数不在min和max之间,命令行将会报
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年企业管理师考试试题及答案拓展
- 2025年统计师职业资格考试试卷及答案
- 2025年数字营销师考试试题及答案
- 2025年护理管理与实践考试试题及答案
- 2025年创意写作与文学分析考试卷及答案
- 知识产权收益分割与科技成果转化合作协议
- 金融机构间货币结算服务协议补充
- 离职人员保密协议与竞业限制合同(体育用品行业)
- 购物中心珠宝区品牌租赁与区域市场合作合同
- 城市级停车诱导系统与城市供电合同
- 人教版小学二年级下册数学 第6单元 第6课时 解决问题(2) 课件
- 2024年延安通和电业有限责任公司招聘考试真题
- 2025年中国矿山支护设备行业市场规模及投资前景预测分析报告
- 新形势下如何抓好“两个经常性”工作
- 监控立杆采购合同协议
- 贴改色膜合同协议
- 电工比武大赛试题及答案
- 邮政储蓄大堂引导员培训
- 社工小组协议书范例
- 2025-2030中国组合蒸汽烤箱行业市场发展趋势与前景展望战略研究报告
- 每日安全巡查记录表
评论
0/150
提交评论