網(wǎng)站首頁 編程語言 正文
其實簡單的來說,cobra就是一個自定義命令工具,我們經(jīng)常使用一些命令來構(gòu)建項目,但是這些命令都是go自帶的,你想寫自己的命令就可以使用cobra庫來試一試。
一,安裝
$ go get -u github.com/spf13/cobra
二,簡單的cobra項目
先構(gòu)建一個簡單的cobra命令,以此來熟悉cobra是怎么用的
創(chuàng)建一個cmd目錄,在目錄里創(chuàng)建一個myOrder.go,實際上這個名字可以隨便命名,一般來說,你創(chuàng)建的啥命令就寫啥名字,這不是為了好找么。
package cmd import ( "fmt" "github.com/spf13/cobra" ) var rootCmd = cobra.Command{ // 命令的名稱 Use: "myOrder", // 剪短介紹 Short: "這是一個我的私有命令", // 詳細(xì)介紹 Long: "自定義私有命令,主要是想測試下這玩意能不能用", // 普通運行,如果需要返回error要使用RUNE Run: func(cmd *cobra.Command, args []string) { fmt.Println("這是一條myOrder命令的反饋,反正啥也沒處理") }, } func Execute() { if err := rootCmd.Execute(); err != nil { fmt.Println("這里有錯誤", err) } }
然后在main.go 入口里運行Execute即可
main.go ↓
package main import "cobraTest/cmd" func main() { cmd.Execute() }
cobraTest是這個項目的名字,cmd是剛才創(chuàng)建的那個包(目錄)。
此時是不能直接像往常一樣go run的,要先構(gòu)建為可執(zhí)行文件,在windows上就是exe
go build
go build之后會發(fā)現(xiàn)目錄里多出了一個可執(zhí)行文件,
這時候我們可以進(jìn)行簡單的測試
三,測試
執(zhí)行可執(zhí)行文件,并且?guī)衔覀儎偛诺哪莻€命令
.\cobraTest.exe myOrder
這就是剛才寫的那個RUN 里面的運行結(jié)果
四,增加flag參數(shù)
package cmd import ( "fmt" "github.com/spf13/cobra" ) var rootCmd = cobra.Command{ // 命令的名稱 Use: "myOrder", // 剪短介紹 Short: "這是一個我的私有命令", // 詳細(xì)介紹 Long: "自定義私有命令,主要是想測試下這玩意能不能用", // 普通運行,如果需要返回error要使用RUNE Run: func(cmd *cobra.Command, args []string) { fmt.Println("這是一條myOrder命令的反饋,反正啥也沒處理") // 讀取第一個flag 參數(shù) getString, _ := cmd.Flags().GetString("hahaha") fmt.Println(getString) // 讀取第二個flag 參數(shù) getString, _ = cmd.Flags().GetString("heiheihei") fmt.Println(getString) }, } func Execute() { // 增加一個flag 參數(shù) // flag參數(shù)的名稱,示例值,flag參數(shù)解釋 rootCmd.PersistentFlags().String("hahaha", "", "隨便寫點啥吧") // 再增加一個flag 參數(shù) rootCmd.Flags().String("heiheihei", "", "輸入一些東西") if err := rootCmd.Execute(); err != nil { fmt.Println("這里有錯誤", err) } }
在設(shè)定完rootCmd后,就可以直接給rootCmd結(jié)構(gòu)體增加flag參數(shù),并在run里面讀取出來,修改代碼后要重新go build,之后執(zhí)行命令的時候,加上flag參數(shù)
.\cobraTest.exe myOrder --hahaha 哈哈哈 --heiheihei 嘿嘿嘿
五,額外命令
有的文章說這是子命令,其實是不恰當(dāng)?shù)?,這是為了讓一個工程可以有多條命令,而無需生成多個可執(zhí)行文件。
構(gòu)建兩個命令,并在main.go里面寫一個根命令
firstOrder.go ↓
package cmd import ( "fmt" "github.com/spf13/cobra" ) // 大寫可用于外部訪問 var FirstCmd = cobra.Command{ // 命令的名稱 Use: "firstOrder", // 剪短介紹 Short: "1號命令", // 普通運行,如果需要返回error要使用RUNE Run: func(cmd *cobra.Command, args []string) { fmt.Println("1號命令可以執(zhí)行") }, }
secondOrder.go ↓
package cmd import ( "fmt" "github.com/spf13/cobra" ) var SecondCmd = cobra.Command{ // 命令的名稱 Use: "secondOrder", // 剪短介紹 Short: "2號命令", // 普通運行,如果需要返回error要使用RUNE Run: func(cmd *cobra.Command, args []string) { fmt.Println("2號命令可以執(zhí)行") }, }
main.go ↓
package main import ( "cobraTest/cmd" "fmt" "github.com/spf13/cobra" ) func main() { rootCmd := cobra.Command{ Use: "rootOrder", Short: "根命令", TraverseChildren: true, } // 把這兩條命令加入到根命令里面 rootCmd.AddCommand(&cmd.FirstCmd) rootCmd.AddCommand(&cmd.SecondCmd) if err := rootCmd.Execute(); err != nil { fmt.Println("Could not run command") } }
執(zhí)行g(shù)o build
原文鏈接:https://blog.csdn.net/kina100/article/details/128151233
相關(guān)推薦
- 2022-07-25 Python實現(xiàn)文件及文件夾操作大全_python
- 2023-07-03 前端面試中遇到的垂直居中問題
- 2022-09-19 C/C++淺析鄰接表拓?fù)渑判蛩惴ǖ膶崿F(xiàn)_C 語言
- 2023-10-25 用promise.all搭配map方法解決異步問題
- 2022-04-20 Django學(xué)習(xí)之靜態(tài)文件與模板詳解_python
- 2022-12-22 Qt實現(xiàn)繪制一個簡單多邊形的示例代碼_C 語言
- 2022-12-14 Tensorflow2.1?完成權(quán)重或模型的保存和加載_python
- 2022-11-09 SQL語句過濾條件放在on與where子句中的區(qū)別和聯(lián)系淺析_MsSql
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支