




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第玩轉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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45554-2025種豬生產性能測定技術規范
- GB/T 45517-2025玩具及兒童用品中苯酚的測定高效液相色譜法
- 醫護職業形象與服務禮儀培訓體系
- 職業衛生健康培訓總結
- 如何確保生產的可持續性計劃
- 河北全國計算機職稱考試題庫單選題100道及答案
- 物業買賣協議書
- 轉運車免責協議書范本
- 近海船買賣合同協議
- 民建房屋協議書
- 《產業經濟學》全書配套教學課件
- 鐵路線路工務入路培訓課件
- 隧道預留、預埋管、孔、槽和洞室檢查記錄表
- 注塑機日常保養點檢表
- 幼兒園繪本故事:《感謝的味道》 PPT課件
- (高清版)建筑塑料復合模板工程技術規程JGJ_T 352-2014
- DBJ61∕T 190-2021 居住建筑室內裝配式裝修工程技術規程
- 供應商考察評估報告
- 道路交通事故--------者及家庭情況登記表(共1頁)
- ZPS型聲控自動噴霧降塵裝置說明書
- 200903寶鋼大廈BA系統改造方案
評論
0/150
提交評論