玩轉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

提交評論