使用 cobra-cli 搭建手腳架

使用 cobra-cli 搭建手腳架

# 安裝 cobra-cli
go install github.com/spf13/cobra-cli@latest
# 創(chuàng)建一個(gè)應(yīng)用
mkdir myapp && cd myapp
# 初始化 go mod
go mod init myapp
# 使用 cobra-cli 搭建手腳架
cobra-cli init

注意: cobra-cli 在 go1.18+ 的 go work 模式下有 bug, 不要使用 go work 模式
2022年11月18日的最新版本1.3.0 查看 issue https://github.com/spf13/cobra-cli/issues/26

查看生成的代碼

$ tree -L 2
.
├── LICENSE
├── cmd
│   └── root.go
├── go.mod
├── go.sum
└── main.go

測(cè)試運(yùn)行

$ go run main.go 
A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:

Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.

新增命令

cobra-cli add serve
cobra-cli add config

查看新增的命令

$ go run main.go
A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:

Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.

Usage:
  myapp [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  config      A brief description of your command
  help        Help about any command
  serve       A brief description of your command

Flags:
  -h, --help     help for myapp
  -t, --toggle   Help message for toggle

Use "myapp [command] --help" for more information about a command.
$ 

新增 config 命令的子命令

cobra-cli add create -p 'configCmd'

查看新增的子命令

$ go run main.go config --help
A longer description that spans multiple lines and likely contains examples
and usage of using your command. For example:

Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.

Usage:
  myapp config [flags]
  myapp config [command]

Available Commands:
  create      A brief description of your command

Flags:
  -h, --help   help for config

Use "myapp config [command] --help" for more information about a command.
$

填充業(yè)務(wù)邏輯

定義 Flags

Flag 有 2 種, Persistent Flag 和 Local Flag, Persistent Flag 可以在此命令和所有的子命令都生效, Local Flag 只是在此命令生效

比如綁定到 rootCmd 的 Persistent Flag 相當(dāng)于全局 Flag, 所有的命令都能調(diào)用

rootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose output")

但是 Local Flag 只是在當(dāng)前有效

localCmd.Flags().StringVarP(&Source, "source", "s", "", "Source directory to read from")

reference

更多參考

本文由mdnice多平臺(tái)發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子置尔,更是在濱河造成了極大的恐慌邦蜜,老刑警劉巖照棋,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猜拾,死亡現(xiàn)場(chǎng)離奇詭異绍昂,居然都是意外死亡唯绍,警方通過(guò)查閱死者的電腦和手機(jī)拼岳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)况芒,“玉大人惜纸,你說(shuō)我怎么就攤上這事。” “怎么了耐版?”我有些...
    開(kāi)封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵祠够,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我粪牲,道長(zhǎng)古瓤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任腺阳,我火速辦了婚禮落君,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亭引。我一直安慰自己绎速,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布焙蚓。 她就那樣靜靜地躺著纹冤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪主届。 梳的紋絲不亂的頭發(fā)上赵哲,一...
    開(kāi)封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音君丁,去河邊找鬼枫夺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绘闷,可吹牛的內(nèi)容都是我干的橡庞。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼印蔗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扒最!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起华嘹,我...
    開(kāi)封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吧趣,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后耙厚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體强挫,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年薛躬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俯渤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡型宝,死狀恐怖八匠,靈堂內(nèi)的尸體忽然破棺而出絮爷,到底是詐尸還是另有隱情,我是刑警寧澤梨树,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布坑夯,位于F島的核電站,受9級(jí)特大地震影響劝萤,放射性物質(zhì)發(fā)生泄漏渊涝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一床嫌、第九天 我趴在偏房一處隱蔽的房頂上張望跨释。 院中可真熱鬧,春花似錦厌处、人聲如沸鳖谈。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缆娃。三九已至,卻和暖如春瑰排,著一層夾襖步出監(jiān)牢的瞬間贯要,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工椭住, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留崇渗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓京郑,卻偏偏與公主長(zhǎng)得像宅广,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子些举,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容