玩转Go命令行工具Cobra_第1页
玩转Go命令行工具Cobra_第2页
玩转Go命令行工具Cobra_第3页
玩转Go命令行工具Cobra_第4页
玩转Go命令行工具Cobra_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第玩转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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论