[cobra]-強大的CLI應(yīng)用程序庫

cobra介紹

Cobra是一個用于創(chuàng)建強大的現(xiàn)代CLI應(yīng)用程序的庫休傍,也是一個用于生成應(yīng)用程序和命令文件的程序对省。

Cobra用于許多Go項目,如KubernetesHugoGithub CLI等。此列表包含了使用Cobra的更廣泛的項目列表酌媒。

概述

Cobra是一個庫,提供了一個簡單的界面來創(chuàng)建功能強大的現(xiàn)代CLI界面迄靠,類似于git&go工具馍佑。

Cobra還是一個應(yīng)用程序,它將生成您的應(yīng)用程序框架以快速開發(fā)基于Cobra的應(yīng)用程序梨水。

眼鏡蛇提供:

  • 簡單易用的基于子的CLI:app serverapp fetch等茵臭。
  • 完全兼容POSIX的標(biāo)志(包括短版和長版)
  • 嵌套子命令
  • 全局疫诽,局部和級聯(lián)標(biāo)志
  • 易產(chǎn)生的應(yīng)用程序和命令與cobra init appnamecobra add cmdname
  • 明智的建議(app srver……是您的意思app server嗎?)
  • 自動生成命令和標(biāo)志的幫助
  • 自動幫助標(biāo)志識別-h旦委,--help等等奇徒。
  • 為您的應(yīng)用程序自動生成的外殼自動完成功能(bash,zsh缨硝,fish摩钙,powershell)
  • 自動為您的應(yīng)用程序生成手冊頁
  • 命令別名,以便您可以更改內(nèi)容而不會破壞它們
  • 定義自己的幫助查辩,用法等的靈活性胖笛。
  • 可選與viper緊密集成,可用于12因子應(yīng)用程序

概念

Cobra建立在命令宜岛,參數(shù)和標(biāo)志的結(jié)構(gòu)上长踊。

命令代表動作,Args是事物萍倡,Flags是這些動作的修飾符身弊。

最好的應(yīng)用程序在使用時讀起來就像句子,結(jié)果,用戶直觀地知道如何與之交互阱佛。

遵循的模式是 APPNAME VERB NOUN --ADJECTIVE.APPNAME COMMAND ARG --FLAG

一些真實的例子可以更好地說明這一點帖汞。

在以下示例中,“服務(wù)器”是命令凑术,“端口”是標(biāo)志:

hugo server --port=1313

在此命令中翩蘸,我們告訴Git克隆url的內(nèi)容。

git clone URL --bare

安裝

使用眼鏡蛇很容易麦萤。首先鹿鳖,使用go get來安裝該庫的最新版本。此命令將安裝cobra生成器可執(zhí)行文件以及庫及其依賴項:

go get -u github.com/spf13/cobra

Next, include Cobra in your application:

import "github.com/spf13/cobra"

入門

歡迎您提供自己的組織壮莹,但是通吵嶂模基于Cobra的應(yīng)用程序?qū)⒆裱韵陆M織結(jié)構(gòu):

  ? appName/
    ? cmd/
        add.go
        your.go
        commands.go
        here.go
      main.go

在Cobra應(yīng)用程序中,通常main.go文件非常裸露命满。它有一個目的:初始化眼鏡蛇

package main

import (
  "{pathToYourApp}/cmd"
)

func main() {
  cmd.Execute()
}

Cobra使用

目錄結(jié)構(gòu)

image-20210218100009073

基命令

創(chuàng)建root.go文件涝滴,定義一個基命令

package cmd

import (
    "github.com/spf13/cobra"
)

var RootCmd = &cobra.Command{
    Use: "gonne",
    Run: func(cmd *cobra.Command, args []string) {
        if len(args) == 0 {
            cmd.Help()
            return
        }
    },
}

在main函數(shù)中使用命令,就是這么簡單

main.go文件

package main

import (
    "demo-practice/cobra/cmd"
    "fmt"
    "os"
)

func main() {
    if err := cmd.RootCmd.Execute(); err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
}

在windows環(huán)境下編譯

go build -o gonne.exe

執(zhí)行命令查看效果胶台,輸出內(nèi)容如下所示

gonne.exe

Usage:
gonne [flags]
gonne [command]

Available Commands:
help Help about any command
version Print the version number of Gonne

Flags:
-h, --help help for gonne

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

子命令

在基命令上增加子命令也相當(dāng)簡單歼疮,根本無需在基命令和main方法中寫任何代碼,只需新建一個go文件诈唬,多個子命令間也是相互獨立的韩脏,多么優(yōu)雅的代碼,告別各種case

增加一個版本命令用法:

在cmd目錄下增加一個version.go文件,內(nèi)容如下

package cmd

import "github.com/spf13/cobra"

func init() {
    RootCmd.AddCommand(versionCmd)
}

var versionCmd = &cobra.Command{
    Use:   "version",
    Short: "Print the version number of Gonne",
    Run: func(cmd *cobra.Command, args []string) {
        println("gonne version is 0.0.1")
    },
}

init()函數(shù)將此命令添加到基命令下

編譯后執(zhí)行 gonne version

gonne version is 0.0.1

資源列表

我的博客

https://github.com/spf13/cobra

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铸磅,一起剝皮案震驚了整個濱河市赡矢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阅仔,老刑警劉巖吹散,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異八酒,居然都是意外死亡空民,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門羞迷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來界轩,“玉大人,你說我怎么就攤上這事衔瓮∷拾簦” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵报辱,是天一觀的道長与殃。 經(jīng)常有香客問我单山,道長,這世上最難降的妖魔是什么幅疼? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任米奸,我火速辦了婚禮,結(jié)果婚禮上爽篷,老公的妹妹穿的比我還像新娘悴晰。我一直安慰自己,他們只是感情好逐工,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布铡溪。 她就那樣靜靜地躺著,像睡著了一般泪喊。 火紅的嫁衣襯著肌膚如雪棕硫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天袒啼,我揣著相機與錄音哈扮,去河邊找鬼。 笑死蚓再,一個胖子當(dāng)著我的面吹牛滑肉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播摘仅,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼靶庙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了娃属?” 一聲冷哼從身側(cè)響起惶洲,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膳犹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體签则,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡须床,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了渐裂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豺旬。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖柒凉,靈堂內(nèi)的尸體忽然破棺而出族阅,到底是詐尸還是另有隱情,我是刑警寧澤膝捞,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布坦刀,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鲤遥。R本人自食惡果不足惜沐寺,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盖奈。 院中可真熱鬧混坞,春花似錦、人聲如沸钢坦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爹凹。三九已至厨诸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逛万,已是汗流浹背泳猬。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宇植,地道東北人得封。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像指郁,于是被迫代替她去往敵國和親忙上。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355