連接包含了認證,可以使用 password 或者 sshkey 2種方式來認證。下面的示例為了簡單,使用了密碼認證的方式來完成連接。
成都創(chuàng)新互聯(lián)是專業(yè)的皋蘭網(wǎng)站建設(shè)公司,皋蘭接單;提供成都網(wǎng)站制作、網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行皋蘭網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
import (
"fmt"
"time"
"golang.org/x/crypto/ssh"
Go語言內(nèi)置的flag包實現(xiàn)了命令行參數(shù)的解析,flag包使得開發(fā)命令行工具更為簡單。
如果你只是簡單的想要獲取命令行參數(shù),可以像下面的代碼示例一樣使用os.Args來獲取命令行參數(shù)。
將上面的代碼執(zhí)行g(shù)o build -o "args_demo"編譯之后,執(zhí)行:
os.Args是一個存儲命令行參數(shù)的字符串切片,它的第一個元素是執(zhí)行文件的名稱。
本文介紹了flag包的常用函數(shù)和基本用法,更詳細的內(nèi)容請查看官方文檔。
flag包支持的命令行參數(shù)類型有bool、int、int64、uint、uint64、float float64、string、duration。
有以下兩種常用的定義命令行flag參數(shù)的方法。
基本格式如下:
flag.Type(flag名, 默認值, 幫助信息)*Type 例如我們要定義姓名、年齡、婚否三個命令行參數(shù),我們可以按如下方式定義:
需要注意的是,此時name、age、married、delay均為對應(yīng)類型的指針。
基本格式如下: flag.TypeVar(Type指針, flag名, 默認值, 幫助信息) 例如我們要定義姓名、年齡、婚否三個命令行參數(shù),我們可以按如下方式定義:
通過以上兩種方法定義好命令行flag參數(shù)后,需要通過調(diào)用flag.Parse()來對命令行參數(shù)進行解析。
支持的命令行參數(shù)格式有以下幾種:
其中,布爾類型的參數(shù)必須使用等號的方式指定。
Flag解析在第一個非flag參數(shù)(單個”-“不是flag參數(shù))之前停止,或者在終止符”–“之后停止。
定義
使用
命令行參數(shù)使用提示:
$ ./flag_demo -help
Usage of ./flag_demo:
-age int
年齡 (default 18)
-d duration
時間間隔
-married
婚否
-name string
姓名 (default "張三")
正常使用命令行flag參數(shù):
使用非flag命令行參數(shù):
原文鏈接:
cobra是一個提供簡單接口來創(chuàng)建強大的現(xiàn)代CLI界面的庫類似git git tools,cobra也是一個應(yīng)用程序,它會生成你的應(yīng)用程序的腳手架來快速開發(fā)基于cobra的應(yīng)用程序
cobra提供:
cobra建立在命令、參數(shù)、標志的結(jié)構(gòu)之上
commands代表動作,args是事物,flags是動作的修飾符
最好的應(yīng)用程序在使用時讀起來就像句子,因此,用戶直觀地知道如何與它們交互
模式如下:APPNAME VERB NOUN --ADJECTIVE. or APPNAME COMMAND ARG --FLAG(APPNAME 動詞 名詞 形容詞 或者 APPNAME 命令 參數(shù) 標志)
一些真實世界的好例子可以更好地說明這一點
kubectl 命令更能體現(xiàn)APPNAME 動詞 名詞 形容詞
如下的例子,server 是command,port是flag
這個命令中,我們告訴git 克隆url
命令是應(yīng)用程序的中心點,應(yīng)用程序支持的每一個交互都包含在一個命令中,命令可以有子命令,也可以運行操作
在上面的例子中,server是命令
更多關(guān)于cobra.Command
flag是一種修改命令行為的方式,cobra支持完全兼容POSIX標志,也支持go flag package,cobra可以定義到子命令上的標志,也可以僅對該命令可用的標志
在上面的命令中,port是標志
標志的功能由 pflag library 提供,pflag library是flag標準庫的一個分支,在添加POSIX兼容性的同時維護相同的接口。
使用cobra很簡單,首先,使用go get按照最新版本的庫,這個命令會安裝cobra可執(zhí)行程序以及庫和依賴項
下一步,引入cobra到應(yīng)用程序中
雖然歡迎您提供自己的組織,但通?;贑obra的應(yīng)用程序?qū)⒆裱韵陆M織結(jié)構(gòu):
在Cobra應(yīng)用程序中,main.go文件通常非常簡單。它有一個目的:初始化Cobra。
使用cobra生成器
cobra提供了程序用來創(chuàng)建你的應(yīng)用程序然后添加你想添加的命令,這是將cobra引入應(yīng)用程序最簡單的方式
這兒 你可以發(fā)現(xiàn)關(guān)于cobra的更多信息
要手動實現(xiàn)cobra,需要創(chuàng)建一個main.go 和rootCmd文件,可以根據(jù)需要提供其他命令
Cobra不需要任何特殊的構(gòu)造器。只需創(chuàng)建命令。
理想情況下,您可以將其放在app/cmd/root.go中:
在init()函數(shù)中定義標志和處理配置
例子如下,cmd/root.go:
創(chuàng)建main.go
使用root命令,您需要讓主函數(shù)執(zhí)行它。為清楚起見,Execute應(yīng)該在根目錄下運行,盡管它可以在任何命令上調(diào)用。
在Cobra應(yīng)用程序中,main.go文件通常非常簡單。它有一個目的:初始化Cobra。
可以定義其他命令,通常每個命令在cmd/目錄中都有自己的文件。
如果要創(chuàng)建版本命令,可以創(chuàng)建cmd/version.go并用以下內(nèi)容填充它:
如果希望將錯誤返回給命令的調(diào)用者,可以使用RunE。
然后可以在execute函數(shù)調(diào)用中捕獲錯誤。
標志提供修飾符來控制操作命令的操作方式。
由于標志是在不同的位置定義和使用的,因此我們需要在外部定義一個具有正確作用域的變量來分配要使用的標志。
有兩種不同的方法來分配標志。
標志可以是“持久”的,這意味著該標志將可用于分配給它的命令以及該命令下的每個命令。對于全局標志,在根上指定一個標志作為持久標志。
也可以在本地分配一個標志,該標志只應(yīng)用于該特定命令。
默認情況下,Cobra只解析目標命令上的本地標志,而忽略父命令上的任何本地標志。通過啟用Command.TraverseChildren,Cobra將在執(zhí)行目標命令之前解析每個命令上的本地標志。
使用viper綁定標志
在本例中,持久標志author與viper綁定。注意:當用戶未提供--author標志時,變量author將不會設(shè)置為config中的值。
更多關(guān)于 viper的文檔
Flags默認是可選的,如果希望命令在未設(shè)置標志時報告錯誤,請根據(jù)需要進行標記:
持久性Flags
可以使用命令的Args字段指定位置參數(shù)的驗證。
內(nèi)置了以下驗證器:
在下面的示例中,我們定義了三個命令。兩個是頂級命令,一個(cmdTimes)是頂級命令之一的子命令。在這種情況下,根是不可執(zhí)行的,這意味著需要一個子命令。這是通過不為“rootCmd”提供“Run”來實現(xiàn)的。
我們只為一個命令定義了一個標志。
有關(guān)標志的更多文檔,請訪問
對于一個更完整的例子更大的應(yīng)用程序,請檢查 Hugo 。
當您有子命令時,Cobra會自動將help命令添加到應(yīng)用程序中。當用戶運行“應(yīng)用程序幫助”時,將調(diào)用此函數(shù)。此外,help還支持所有其他命令作為輸入。例如,您有一個名為“create”的命令,沒有任何附加配置;調(diào)用“app help create”時,Cobra將起作用。每個命令都會自動添加“-help”標志。
以下輸出由Cobra自動生成。除了命令和標志定義之外,不需要任何東西。
幫助就像其他命令一樣。它周圍沒有特殊的邏輯或行為。事實上,你可以提供你想提供的。
您可以為默認命令提供自己的幫助命令或模板,以用于以下功能:
當用戶提供無效的標志或無效的命令時,Cobra通過向用戶顯示“用法”來響應(yīng)。
你可以從上面的幫助中認識到這一點。這是因為默認幫助將用法作為其輸出的一部分嵌入。
您可以提供自己的使用函數(shù)或模板供Cobra使用。與幫助一樣,函數(shù)和模板也可以通過公共方法重寫:
如果在root命令上設(shè)置了version字段,Cobra會添加一個頂級的'--version'標志。運行帶有“-version”標志的應(yīng)用程序?qū)⑹褂冒姹灸0鍖姹敬蛴〉綐藴瘦敵???梢允褂胏md.SetVersionTemplate(s string)函數(shù)自定義模板。
可以在命令的主運行函數(shù)之前或之后運行函數(shù)。PersistentPreRun和PreRun函數(shù)將在運行之前執(zhí)行。PersistentPostRun和PostRun將在運行后執(zhí)行。如果子函數(shù)不聲明自己的函數(shù),則它們將繼承Persistent*Run函數(shù)。這些函數(shù)按以下順序運行:
輸出:
當發(fā)生“未知命令”錯誤時,Cobra將打印自動建議。這使得Cobra在發(fā)生拼寫錯誤時的行為類似于git命令。例如:
基于注冊的每個子命令和Levenshtein距離的實現(xiàn),建議是自動的。匹配最小距離2(忽略大小寫)的每個已注冊命令都將顯示為建議。
如果需要在命令中禁用建議或調(diào)整字符串距離,請使用:
or
您還可以使用SuggestFor屬性顯式設(shè)置將為其建議給定命令的名稱。這允許對在字符串距離方面不接近的字符串提供建議,但在您的一組命令中是有意義的,并且對于某些您不需要別名的字符串。例子:
Cobra可以基于子命令、標志等生成文檔。請在 docs generation文檔 中閱讀更多關(guān)于它的信息。
Cobra可以為以下shell生成shell完成文件:bash、zsh、fish、PowerShell。如果您在命令中添加更多信息,這些補全功能將非常強大和靈活。在 Shell Completions 中閱讀更多關(guān)于它的信息。
Cobra is released under the Apache 2.0 license. See LICENSE.txt
首先安裝gomacrogoinstallgithub.com/cosmos72/gomacro@latest安裝完成后,在命令行輸入gomacro就會進入到gomacro的交互式環(huán)境。