真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言命令行,go語言 運(yùn)行

golang命令行庫Cobra的使用

寫了2次才寫完,內(nèi)容很長,翻譯了很久,內(nèi)容來源于Cobra github介紹。翻譯完也更全面的了解了Cobra,功能相當(dāng)強(qiáng)大完善,各種使用的場景都考慮到了。另外也擴(kuò)展了一些其它知識,比如 命令行玩法 , Levenshtein distance 等等。以下是正文:

創(chuàng)新互聯(lián)長期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為稷山企業(yè)提供專業(yè)的成都網(wǎng)站制作、做網(wǎng)站,稷山網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

Cobra提供簡單的接口來創(chuàng)建強(qiáng)大的現(xiàn)代化CLI接口,比如git與go工具。Cobra同時(shí)也是一個(gè)程序, 用于創(chuàng)建CLI程序

Cobra是建立在結(jié)構(gòu)的命令、參數(shù)和標(biāo)志之上。

命令代表操作,參數(shù)和標(biāo)志是這些行動的修飾符。

最好的應(yīng)用程序就像讀取句子。用戶會知道如何使用本機(jī)應(yīng)用程序,因?yàn)樗麄儗⒗斫馊绾问褂盟?/p>

比如下面的例子, server 是命令, port 是標(biāo)志:

在下面的命令,我們告訴Git克隆url地址bare

使用Cobra很簡單。首先,使用 go get 安裝最新版本

然后在你項(xiàng)目里引用Cobra

通?;贑obra的應(yīng)用程序?qū)⒆裱旅娴慕M織結(jié)構(gòu),當(dāng)然你也可以遵循自己的接口:

在Cobra應(yīng)用程序中,通常main.go文件非??斩?。它主要只干一件事:初始化Cobra。

Cobra提供自己的程序來創(chuàng)建你的程序并且添加你想要的命令。這是最簡單的方式把Cobra添加到你的程序里。

這里 你能找到相關(guān)信息

使用Cobra,需要創(chuàng)建一個(gè)空的main.go文件和一個(gè)rootCmd文件。你可以選擇在合適的地方添加額外的命令。

Cobra不需要特殊的構(gòu)造函數(shù)。簡單的就可以創(chuàng)建你的命令。

理想情況下你把這個(gè)放在在 app/cmd/root.go

你會另外定義標(biāo)志和處理配置init()函數(shù)。

比如 cmd/root.go

你需要在main函數(shù)里執(zhí)行root命令。

通常main.go文件非??斩?。它主要只干一件事:初始化Cobra。

其它的命令通常定義在cmd/目錄下的自己文件內(nèi)

如果你想創(chuàng)建一個(gè)version命令,你可以創(chuàng)建cmd/version.go文件,并在文件里這么寫:

標(biāo)志提供修飾符控制動作命令如何操作

當(dāng)標(biāo)志定義好了,我們需要定義一個(gè)變量來關(guān)聯(lián)標(biāo)志

'持久'表示每個(gè)在那個(gè)命令下的命令都將能分配到這個(gè)標(biāo)志。對于全局標(biāo)志,'持久'的標(biāo)志綁定在root上。

Cobra默認(rèn)只在目標(biāo)命令上解析標(biāo)志,父命令忽略任何局部標(biāo)志。通過打開 Command.TraverseChildren Cobra將會在執(zhí)行任意目標(biāo)命令前解析標(biāo)志

你同樣可以通過 viper 綁定標(biāo)志:

在這個(gè)例子中,永久的標(biāo)記 author 被 viper 綁定, 注意 , 當(dāng)用戶沒有給 --author 提供值, author 不會被賦值。

標(biāo)記默認(rèn)是可選的,如果你希望當(dāng)一個(gè)標(biāo)記沒有設(shè)置時(shí),命令行報(bào)錯(cuò),你可以標(biāo)記它為必須的

驗(yàn)證位置參數(shù)可以通過 Command 的 Args 字段。

內(nèi)置下列驗(yàn)證方法

一個(gè)設(shè)置自定義驗(yàn)證的例子

在下面的例子,我們定義了3個(gè)命令。2個(gè)在頂級,一個(gè)(cmdTimes)是其中一個(gè)頂級命令的子命令。在這個(gè)例子里,由于沒有給 rootCmd 提供 Run ,單獨(dú)的root是不能運(yùn)行的,必須要有子命令。

我們僅為一個(gè)命令定義了標(biāo)記。

更多關(guān)于flags的文檔可以在 找到

更完整大型程序的例子, 可以查看 Hugo .

當(dāng)你的程序有子命令時(shí),Cobra 會自動給你程序添加help命令。當(dāng)你運(yùn)行‘a(chǎn)pp help’,會調(diào)用help命令。另外,help同樣支持其它輸入命令。例如,你有一個(gè)沒有任何其它配置的命令叫‘create’,當(dāng)你調(diào)用‘a(chǎn)pp help create’ Corbra 將會起作用。

下面的輸入是 Cobra 自動生成的。除了命令和標(biāo)志的定義,其它不再需要。

help 就跟其它命令一樣,并沒有特殊的邏輯或行為。事實(shí)上,你也可以提供你自己help如果你想的話。

你能為默認(rèn)的命令,提供你自己的help命令或模板。使用下面的方法:

后2個(gè)也將適用于任何子命令

當(dāng)用戶提供無效的標(biāo)記或命令,Cobra 將會返回 用法 。

你可能從上面的幫助意識到,默認(rèn)的幫助將被嵌入到用法里然后作為輸出。

你能提供你自己的用法函數(shù)或模板給 Cobra 使用。

比如幫助,方法和模板都可以重寫。

如果Version字段設(shè)置到了根命令,Cobra 會提供了一個(gè)頂層 ‘--version’標(biāo)記。運(yùn)行帶上‘--version’標(biāo)記的程序,將會按照模板版本信息。模板可以通過 cmd.SetVersionTemplate(s string) 方法修改

在命令運(yùn)行前或運(yùn)行后,再運(yùn)行方法非常容易。 PersistentPreRun 和 PreRun 方法將會在 Run 之前執(zhí)行。 PersistentPostRun 和 PostRun 方法將會在 Run 之后執(zhí)行。 Persistent*Run 方法會被子命令繼承,如果它們自己沒有定義的話。這些方法將按照下面的屬性執(zhí)行:

下面的例子,2個(gè)命令都使用了上面的特性。當(dāng)子命令執(zhí)行的時(shí)候,它將執(zhí)行根命令的 PersistentPreRun ,但不會執(zhí)行根命令的 PersistentPostRun :

輸出:

Cobra 會自動輸出建議,當(dāng)遇到“unknown command”錯(cuò)誤時(shí)。這使得當(dāng)輸入錯(cuò)誤時(shí), Cobra 的行為類似 git 命令。例如:

建議會基于注冊的子命令自動生成。使用了 Levenshtein distance 的實(shí)現(xiàn)。每一個(gè)注冊的命令會匹配2個(gè)距離(忽略大小寫)來提供建議。

如果你希望在你的命令里,禁用建議或虛弱字符串的距離,使用:

你可以通過 SuggestFor 來給命令提供明確的名詞建議。這個(gè)特性允許當(dāng)字符串不相近,但是意思與你的命令相近,別切你也不想給該命令設(shè)置別名。比如:

Cobra 可以基于子命令,標(biāo)記,等生成文檔。以以下格式:

Cobra 可以生成一個(gè)bash-completion文件。如果你給命令添加更多信息,這些completions可以非常強(qiáng)大和靈活。更多介紹在 Bash Completions 。

寫命令行應(yīng)用程序什么不可或缺?Go可以這樣處理命令行參數(shù)

Go語言內(nèi)置的flag包實(shí)現(xiàn)了命令行參數(shù)的解析,flag包使得開發(fā)命令行工具更為簡單。

如果你只是簡單的想要獲取命令行參數(shù),可以像下面的代碼示例一樣使用os.Args來獲取命令行參數(shù)。

將上面的代碼執(zhí)行g(shù)o build -o "args_demo"編譯之后,執(zhí)行:

os.Args是一個(gè)存儲命令行參數(shù)的字符串切片,它的第一個(gè)元素是執(zhí)行文件的名稱。

本文介紹了flag包的常用函數(shù)和基本用法,更詳細(xì)的內(nèi)容請查看官方文檔。

flag包支持的命令行參數(shù)類型有bool、int、int64、uint、uint64、float float64、string、duration。

有以下兩種常用的定義命令行flag參數(shù)的方法。

基本格式如下:

flag.Type(flag名, 默認(rèn)值, 幫助信息)*Type 例如我們要定義姓名、年齡、婚否三個(gè)命令行參數(shù),我們可以按如下方式定義:

需要注意的是,此時(shí)name、age、married、delay均為對應(yīng)類型的指針。

基本格式如下: flag.TypeVar(Type指針, flag名, 默認(rèn)值, 幫助信息) 例如我們要定義姓名、年齡、婚否三個(gè)命令行參數(shù),我們可以按如下方式定義:

通過以上兩種方法定義好命令行flag參數(shù)后,需要通過調(diào)用flag.Parse()來對命令行參數(shù)進(jìn)行解析。

支持的命令行參數(shù)格式有以下幾種:

其中,布爾類型的參數(shù)必須使用等號的方式指定。

Flag解析在第一個(gè)非flag參數(shù)(單個(gè)”-“不是flag參數(shù))之前停止,或者在終止符”–“之后停止。

定義

使用

命令行參數(shù)使用提示:

$ ./flag_demo -help

Usage of ./flag_demo:

-age int

年齡 (default 18)

-d duration

時(shí)間間隔

-married

婚否

-name string

姓名 (default "張三")

正常使用命令行flag參數(shù):

使用非flag命令行參數(shù):

原文鏈接:

Go語言命令行利器cobra使用教程

cobra是一個(gè)提供簡單接口來創(chuàng)建強(qiáng)大的現(xiàn)代CLI界面的庫類似git git tools,cobra也是一個(gè)應(yīng)用程序,它會生成你的應(yīng)用程序的腳手架來快速開發(fā)基于cobra的應(yīng)用程序

cobra提供:

cobra建立在命令、參數(shù)、標(biāo)志的結(jié)構(gòu)之上

commands代表動作,args是事物,flags是動作的修飾符

最好的應(yīng)用程序在使用時(shí)讀起來就像句子,因此,用戶直觀地知道如何與它們交互

模式如下:APPNAME VERB NOUN --ADJECTIVE. or APPNAME COMMAND ARG --FLAG(APPNAME 動詞 名詞 形容詞 或者 APPNAME 命令 參數(shù) 標(biāo)志)

一些真實(shí)世界的好例子可以更好地說明這一點(diǎn)

kubectl 命令更能體現(xiàn)APPNAME 動詞 名詞 形容詞

如下的例子,server 是command,port是flag

這個(gè)命令中,我們告訴git 克隆url

命令是應(yīng)用程序的中心點(diǎn),應(yīng)用程序支持的每一個(gè)交互都包含在一個(gè)命令中,命令可以有子命令,也可以運(yùn)行操作

在上面的例子中,server是命令

更多關(guān)于cobra.Command

flag是一種修改命令行為的方式,cobra支持完全兼容POSIX標(biāo)志,也支持go flag package,cobra可以定義到子命令上的標(biāo)志,也可以僅對該命令可用的標(biāo)志

在上面的命令中,port是標(biāo)志

標(biāo)志的功能由 pflag library 提供,pflag library是flag標(biāo)準(zhǔn)庫的一個(gè)分支,在添加POSIX兼容性的同時(shí)維護(hù)相同的接口。

使用cobra很簡單,首先,使用go get按照最新版本的庫,這個(gè)命令會安裝cobra可執(zhí)行程序以及庫和依賴項(xiàng)

下一步,引入cobra到應(yīng)用程序中

雖然歡迎您提供自己的組織,但通?;贑obra的應(yīng)用程序?qū)⒆裱韵陆M織結(jié)構(gòu):

在Cobra應(yīng)用程序中,main.go文件通常非常簡單。它有一個(gè)目的:初始化Cobra。

使用cobra生成器

cobra提供了程序用來創(chuàng)建你的應(yīng)用程序然后添加你想添加的命令,這是將cobra引入應(yīng)用程序最簡單的方式

這兒 你可以發(fā)現(xiàn)關(guān)于cobra的更多信息

要手動實(shí)現(xiàn)cobra,需要創(chuàng)建一個(gè)main.go 和rootCmd文件,可以根據(jù)需要提供其他命令

Cobra不需要任何特殊的構(gòu)造器。只需創(chuàng)建命令。

理想情況下,您可以將其放在app/cmd/root.go中:

在init()函數(shù)中定義標(biāo)志和處理配置

例子如下,cmd/root.go:

創(chuàng)建main.go

使用root命令,您需要讓主函數(shù)執(zhí)行它。為清楚起見,Execute應(yīng)該在根目錄下運(yùn)行,盡管它可以在任何命令上調(diào)用。

在Cobra應(yīng)用程序中,main.go文件通常非常簡單。它有一個(gè)目的:初始化Cobra。

可以定義其他命令,通常每個(gè)命令在cmd/目錄中都有自己的文件。

如果要創(chuàng)建版本命令,可以創(chuàng)建cmd/version.go并用以下內(nèi)容填充它:

如果希望將錯(cuò)誤返回給命令的調(diào)用者,可以使用RunE。

然后可以在execute函數(shù)調(diào)用中捕獲錯(cuò)誤。

標(biāo)志提供修飾符來控制操作命令的操作方式。

由于標(biāo)志是在不同的位置定義和使用的,因此我們需要在外部定義一個(gè)具有正確作用域的變量來分配要使用的標(biāo)志。

有兩種不同的方法來分配標(biāo)志。

標(biāo)志可以是“持久”的,這意味著該標(biāo)志將可用于分配給它的命令以及該命令下的每個(gè)命令。對于全局標(biāo)志,在根上指定一個(gè)標(biāo)志作為持久標(biāo)志。

也可以在本地分配一個(gè)標(biāo)志,該標(biāo)志只應(yīng)用于該特定命令。

默認(rèn)情況下,Cobra只解析目標(biāo)命令上的本地標(biāo)志,而忽略父命令上的任何本地標(biāo)志。通過啟用Command.TraverseChildren,Cobra將在執(zhí)行目標(biāo)命令之前解析每個(gè)命令上的本地標(biāo)志。

使用viper綁定標(biāo)志

在本例中,持久標(biāo)志author與viper綁定。注意:當(dāng)用戶未提供--author標(biāo)志時(shí),變量author將不會設(shè)置為config中的值。

更多關(guān)于 viper的文檔

Flags默認(rèn)是可選的,如果希望命令在未設(shè)置標(biāo)志時(shí)報(bào)告錯(cuò)誤,請根據(jù)需要進(jìn)行標(biāo)記:

持久性Flags

可以使用命令的Args字段指定位置參數(shù)的驗(yàn)證。

內(nèi)置了以下驗(yàn)證器:

在下面的示例中,我們定義了三個(gè)命令。兩個(gè)是頂級命令,一個(gè)(cmdTimes)是頂級命令之一的子命令。在這種情況下,根是不可執(zhí)行的,這意味著需要一個(gè)子命令。這是通過不為“rootCmd”提供“Run”來實(shí)現(xiàn)的。

我們只為一個(gè)命令定義了一個(gè)標(biāo)志。

有關(guān)標(biāo)志的更多文檔,請?jiān)L問

對于一個(gè)更完整的例子更大的應(yīng)用程序,請檢查 Hugo 。

當(dāng)您有子命令時(shí),Cobra會自動將help命令添加到應(yīng)用程序中。當(dāng)用戶運(yùn)行“應(yīng)用程序幫助”時(shí),將調(diào)用此函數(shù)。此外,help還支持所有其他命令作為輸入。例如,您有一個(gè)名為“create”的命令,沒有任何附加配置;調(diào)用“app help create”時(shí),Cobra將起作用。每個(gè)命令都會自動添加“-help”標(biāo)志。

以下輸出由Cobra自動生成。除了命令和標(biāo)志定義之外,不需要任何東西。

幫助就像其他命令一樣。它周圍沒有特殊的邏輯或行為。事實(shí)上,你可以提供你想提供的。

您可以為默認(rèn)命令提供自己的幫助命令或模板,以用于以下功能:

當(dāng)用戶提供無效的標(biāo)志或無效的命令時(shí),Cobra通過向用戶顯示“用法”來響應(yīng)。

你可以從上面的幫助中認(rèn)識到這一點(diǎn)。這是因?yàn)槟J(rèn)幫助將用法作為其輸出的一部分嵌入。

您可以提供自己的使用函數(shù)或模板供Cobra使用。與幫助一樣,函數(shù)和模板也可以通過公共方法重寫:

如果在root命令上設(shè)置了version字段,Cobra會添加一個(gè)頂級的'--version'標(biāo)志。運(yùn)行帶有“-version”標(biāo)志的應(yīng)用程序?qū)⑹褂冒姹灸0鍖姹敬蛴〉綐?biāo)準(zhǔn)輸出??梢允褂胏md.SetVersionTemplate(s string)函數(shù)自定義模板。

可以在命令的主運(yùn)行函數(shù)之前或之后運(yùn)行函數(shù)。PersistentPreRun和PreRun函數(shù)將在運(yùn)行之前執(zhí)行。PersistentPostRun和PostRun將在運(yùn)行后執(zhí)行。如果子函數(shù)不聲明自己的函數(shù),則它們將繼承Persistent*Run函數(shù)。這些函數(shù)按以下順序運(yùn)行:

輸出:

當(dāng)發(fā)生“未知命令”錯(cuò)誤時(shí),Cobra將打印自動建議。這使得Cobra在發(fā)生拼寫錯(cuò)誤時(shí)的行為類似于git命令。例如:

基于注冊的每個(gè)子命令和Levenshtein距離的實(shí)現(xiàn),建議是自動的。匹配最小距離2(忽略大小寫)的每個(gè)已注冊命令都將顯示為建議。

如果需要在命令中禁用建議或調(diào)整字符串距離,請使用:

or

您還可以使用SuggestFor屬性顯式設(shè)置將為其建議給定命令的名稱。這允許對在字符串距離方面不接近的字符串提供建議,但在您的一組命令中是有意義的,并且對于某些您不需要別名的字符串。例子:

Cobra可以基于子命令、標(biāo)志等生成文檔。請?jiān)?docs generation文檔 中閱讀更多關(guān)于它的信息。

Cobra可以為以下shell生成shell完成文件:bash、zsh、fish、PowerShell。如果您在命令中添加更多信息,這些補(bǔ)全功能將非常強(qiáng)大和靈活。在 Shell Completions 中閱讀更多關(guān)于它的信息。

Cobra is released under the Apache 2.0 license. See LICENSE.txt


網(wǎng)頁題目:go語言命令行,go語言 運(yùn)行
URL鏈接:http://weahome.cn/article/hdgscp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部