cobra是一個提供簡單接口來創(chuàng)建強大的現(xiàn)代CLI界面的庫類似git git tools,cobra也是一個應(yīng)用程序,它會生成你的應(yīng)用程序的腳手架來快速開發(fā)基于cobra的應(yīng)用程序
創(chuàng)新互聯(lián)于2013年開始,先為察哈爾右翼前等服務(wù)建站,察哈爾右翼前等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為察哈爾右翼前企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
cobra提供:
cobra建立在命令、參數(shù)、標(biāo)志的結(jié)構(gòu)之上
commands代表動作,args是事物,flags是動作的修飾符
最好的應(yīng)用程序在使用時讀起來就像句子,因此,用戶直觀地知道如何與它們交互
模式如下:APPNAME VERB NOUN --ADJECTIVE. or APPNAME COMMAND ARG --FLAG(APPNAME 動詞 名詞 形容詞 或者 APPNAME 命令 參數(shù) 標(biāo)志)
一些真實世界的好例子可以更好地說明這一點
kubectl 命令更能體現(xiàn)APPNAME 動詞 名詞 形容詞
如下的例子,server 是command,port是flag
這個命令中,我們告訴git 克隆url
命令是應(yīng)用程序的中心點,應(yīng)用程序支持的每一個交互都包含在一個命令中,命令可以有子命令,也可以運行操作
在上面的例子中,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)庫的一個分支,在添加POSIX兼容性的同時維護(hù)相同的接口。
使用cobra很簡單,首先,使用go get按照最新版本的庫,這個命令會安裝cobra可執(zhí)行程序以及庫和依賴項
下一步,引入cobra到應(yīng)用程序中
雖然歡迎您提供自己的組織,但通常基于Cobra的應(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ù)中定義標(biāo)志和處理配置
例子如下,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)用中捕獲錯誤。
標(biāo)志提供修飾符來控制操作命令的操作方式。
由于標(biāo)志是在不同的位置定義和使用的,因此我們需要在外部定義一個具有正確作用域的變量來分配要使用的標(biāo)志。
有兩種不同的方法來分配標(biāo)志。
標(biāo)志可以是“持久”的,這意味著該標(biāo)志將可用于分配給它的命令以及該命令下的每個命令。對于全局標(biāo)志,在根上指定一個標(biāo)志作為持久標(biāo)志。
也可以在本地分配一個標(biāo)志,該標(biāo)志只應(yīng)用于該特定命令。
默認(rèn)情況下,Cobra只解析目標(biāo)命令上的本地標(biāo)志,而忽略父命令上的任何本地標(biāo)志。通過啟用Command.TraverseChildren,Cobra將在執(zhí)行目標(biāo)命令之前解析每個命令上的本地標(biāo)志。
使用viper綁定標(biāo)志
在本例中,持久標(biāo)志author與viper綁定。注意:當(dāng)用戶未提供--author標(biāo)志時,變量author將不會設(shè)置為config中的值。
更多關(guān)于 viper的文檔
Flags默認(rèn)是可選的,如果希望命令在未設(shè)置標(biāo)志時報告錯誤,請根據(jù)需要進(jìn)行標(biāo)記:
持久性Flags
可以使用命令的Args字段指定位置參數(shù)的驗證。
內(nèi)置了以下驗證器:
在下面的示例中,我們定義了三個命令。兩個是頂級命令,一個(cmdTimes)是頂級命令之一的子命令。在這種情況下,根是不可執(zhí)行的,這意味著需要一個子命令。這是通過不為“rootCmd”提供“Run”來實現(xiàn)的。
我們只為一個命令定義了一個標(biāo)志。
有關(guān)標(biāo)志的更多文檔,請訪問
對于一個更完整的例子更大的應(yīng)用程序,請檢查 Hugo 。
當(dāng)您有子命令時,Cobra會自動將help命令添加到應(yīng)用程序中。當(dāng)用戶運行“應(yīng)用程序幫助”時,將調(diào)用此函數(shù)。此外,help還支持所有其他命令作為輸入。例如,您有一個名為“create”的命令,沒有任何附加配置;調(diào)用“app help create”時,Cobra將起作用。每個命令都會自動添加“-help”標(biāo)志。
以下輸出由Cobra自動生成。除了命令和標(biāo)志定義之外,不需要任何東西。
幫助就像其他命令一樣。它周圍沒有特殊的邏輯或行為。事實上,你可以提供你想提供的。
您可以為默認(rèn)命令提供自己的幫助命令或模板,以用于以下功能:
當(dāng)用戶提供無效的標(biāo)志或無效的命令時,Cobra通過向用戶顯示“用法”來響應(yīng)。
你可以從上面的幫助中認(rèn)識到這一點。這是因為默認(rèn)幫助將用法作為其輸出的一部分嵌入。
您可以提供自己的使用函數(shù)或模板供Cobra使用。與幫助一樣,函數(shù)和模板也可以通過公共方法重寫:
如果在root命令上設(shè)置了version字段,Cobra會添加一個頂級的'--version'標(biāo)志。運行帶有“-version”標(biāo)志的應(yīng)用程序?qū)⑹褂冒姹灸0鍖姹敬蛴〉綐?biāo)準(zhǔn)輸出??梢允褂胏md.SetVersionTemplate(s string)函數(shù)自定義模板。
可以在命令的主運行函數(shù)之前或之后運行函數(shù)。PersistentPreRun和PreRun函數(shù)將在運行之前執(zhí)行。PersistentPostRun和PostRun將在運行后執(zhí)行。如果子函數(shù)不聲明自己的函數(shù),則它們將繼承Persistent*Run函數(shù)。這些函數(shù)按以下順序運行:
輸出:
當(dāng)發(fā)生“未知命令”錯誤時,Cobra將打印自動建議。這使得Cobra在發(fā)生拼寫錯誤時的行為類似于git命令。例如:
基于注冊的每個子命令和Levenshtein距離的實現(xiàn),建議是自動的。匹配最小距離2(忽略大小寫)的每個已注冊命令都將顯示為建議。
如果需要在命令中禁用建議或調(diào)整字符串距離,請使用:
or
您還可以使用SuggestFor屬性顯式設(shè)置將為其建議給定命令的名稱。這允許對在字符串距離方面不接近的字符串提供建議,但在您的一組命令中是有意義的,并且對于某些您不需要別名的字符串。例子:
Cobra可以基于子命令、標(biāo)志等生成文檔。請在 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
本文介紹一些Go語言的基礎(chǔ)語法。
先來看一個簡單的go語言代碼:
go語言的注釋方法:
代碼執(zhí)行結(jié)果:
下面來進(jìn)一步介紹go的基礎(chǔ)語法。
go語言中格式化輸出可以使用 fmt 和 log 這兩個標(biāo)準(zhǔn)庫,
常用方法:
示例代碼:
執(zhí)行結(jié)果:
更多格式化方法可以訪問中的fmt包。
log包實現(xiàn)了簡單的日志服務(wù),也提供了一些格式化輸出的方法。
執(zhí)行結(jié)果:
下面來介紹一下go的數(shù)據(jù)類型
下表列出了go語言的數(shù)據(jù)類型:
int、float、bool、string、數(shù)組和struct屬于值類型,這些類型的變量直接指向存在內(nèi)存中的值;slice、map、chan、pointer等是引用類型,存儲的是一個地址,這個地址存儲最終的值。
常量是在程序編譯時就確定下來的值,程序運行時無法改變。
執(zhí)行結(jié)果:
執(zhí)行結(jié)果:
Go 語言的運算符主要包括算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符、賦值運算符以及指針相關(guān)運算符。
算術(shù)運算符:
關(guān)系運算符:
邏輯運算符:
位運算符:
賦值運算符:
指針相關(guān)運算符:
下面介紹一下go語言中的if語句和switch語句。另外還有一種控制語句叫select語句,通常與通道聯(lián)用,這里不做介紹。
if語法格式如下:
if ... else :
else if:
示例代碼:
語法格式:
另外,添加 fallthrough 會強制執(zhí)行后面的 case 語句,不管下一條case語句是否為true。
示例代碼:
執(zhí)行結(jié)果:
下面介紹幾種循環(huán)語句:
執(zhí)行結(jié)果:
執(zhí)行結(jié)果:
也可以通過標(biāo)記退出循環(huán):
--THE END--
本教程介紹了使用 Godatabase/sql及其標(biāo)準(zhǔn)庫中的包訪問關(guān)系數(shù)據(jù)庫的基礎(chǔ)知識。
您將使用的database/sql包包括用于連接數(shù)據(jù)庫、執(zhí)行事務(wù)、取消正在進(jìn)行的操作等的類型和函數(shù)。
在本教程中,您將創(chuàng)建一個數(shù)據(jù)庫,然后編寫代碼來訪問該數(shù)據(jù)庫。您的示例項目將是有關(guān)老式爵士樂唱片的數(shù)據(jù)存儲庫。
首先,為您要編寫的代碼創(chuàng)建一個文件夾。
1、打開命令提示符并切換到您的主目錄。
在 Linux 或 Mac 上:
在 Windows 上:
2、在命令提示符下,為您的代碼創(chuàng)建一個名為 data-access 的目錄。
3、創(chuàng)建一個模塊,您可以在其中管理將在本教程中添加的依賴項。
運行g(shù)o mod init命令,為其提供新代碼的模塊路徑。
此命令創(chuàng)建一個 go.mod 文件,您添加的依賴項將在其中列出以供跟蹤。
注意: 在實際開發(fā)中,您會指定一個更符合您自己需求的模塊路徑。有關(guān)更多信息,請參閱一下文章。
GO語言(二十五):管理依賴項(上)
GO語言(二十六):管理依賴項(中)
GO語言(二十七):管理依賴項(下)
接下來,您將創(chuàng)建一個數(shù)據(jù)庫。
在此步驟中,您將創(chuàng)建要使用的數(shù)據(jù)庫。您將使用 DBMS 本身的 CLI 創(chuàng)建數(shù)據(jù)庫和表,以及添加數(shù)據(jù)。
您將創(chuàng)建一個數(shù)據(jù)庫,其中包含有關(guān)黑膠唱片上的老式爵士樂錄音的數(shù)據(jù)。
這里的代碼使用MySQL CLI,但大多數(shù) DBMS 都有自己的 CLI,具有類似的功能。
1、打開一個新的命令提示符。
在命令行,登錄到您的 DBMS,如下面的 MySQL 示例所示。
2、在mysql命令提示符下,創(chuàng)建一個數(shù)據(jù)庫。
3、切到您剛剛創(chuàng)建的數(shù)據(jù)庫,以便您可以添加表。
4、在文本編輯器的 data-access 文件夾中,創(chuàng)建一個名為 create-tables.sql 的文件來保存用于添加表的 SQL 腳本。
將以下 SQL 代碼粘貼到文件中,然后保存文件。
在此 SQL 代碼中:
(1)刪除名為album表。 首先執(zhí)行此命令可以讓您更輕松地稍后重新運行腳本。
(2)創(chuàng)建一個album包含四列的表:title、artist和price。每行的id值由 DBMS 自動創(chuàng)建。
(3)添加帶有值的四行。
5、在mysql命令提示符下,運行您剛剛創(chuàng)建的腳本。
您將使用以下形式的source命令:
6、在 DBMS 命令提示符處,使用SELECT語句來驗證您是否已成功創(chuàng)建包含數(shù)據(jù)的表。
接下來,您將編寫一些 Go 代碼進(jìn)行連接,以便進(jìn)行查詢。
現(xiàn)在你已經(jīng)有了一個包含一些數(shù)據(jù)的數(shù)據(jù)庫,開始你的 Go 代碼。
找到并導(dǎo)入一個數(shù)據(jù)庫驅(qū)動程序,該驅(qū)動程序會將您通過database/sql包中的函數(shù)發(fā)出的請求轉(zhuǎn)換為數(shù)據(jù)庫可以理解的請求。
1、在您的瀏覽器中,訪問SQLDrivers wiki 頁面以識別您可以使用的驅(qū)動程序。
2、使用頁面上的列表來識別您將使用的驅(qū)動程序。為了在本教程中訪問 MySQL,您將使用 Go-MySQL-Driver。
3、請注意驅(qū)動程序的包名稱 - 此處為github.com/go-sql-driver/mysql.
4、使用您的文本編輯器,創(chuàng)建一個用于編寫 Go 代碼的文件,并將該文件作為 main.go 保存在您之前創(chuàng)建的數(shù)據(jù)訪問目錄中。
5、進(jìn)入main.go,粘貼以下代碼導(dǎo)入驅(qū)動包。
在此代碼中:
(1)將您的代碼添加到main包中,以便您可以獨立執(zhí)行它。
(2)導(dǎo)入 MySQL 驅(qū)動程序github.com/go-sql-driver/mysql。
導(dǎo)入驅(qū)動程序后,您將開始編寫代碼以訪問數(shù)據(jù)庫。
現(xiàn)在編寫一些 Go 代碼,讓您使用數(shù)據(jù)庫句柄訪問數(shù)據(jù)庫。
您將使用指向結(jié)構(gòu)的指針sql.DB,它表示對特定數(shù)據(jù)庫的訪問。
編寫代碼
1、進(jìn)入 main.go,在import您剛剛添加的代碼下方,粘貼以下 Go 代碼以創(chuàng)建數(shù)據(jù)庫句柄。
在此代碼中:
(3)使用 MySQL 驅(qū)動程序Config和FormatDSN類型以收集連接屬性并將它們格式化為連接字符串的 DSN。
該Config結(jié)構(gòu)使代碼比連接字符串更容易閱讀。
(4)調(diào)用sql.Open 初始化db變量,傳遞 FormatDSN。
(5)檢查來自 的錯誤sql.Open。例如,如果您的數(shù)據(jù)庫連接細(xì)節(jié)格式不正確,它可能會失敗。
為了簡化代碼,您調(diào)用log.Fatal結(jié)束執(zhí)行并將錯誤打印到控制臺。在生產(chǎn)代碼中,您會希望以更優(yōu)雅的方式處理錯誤。
(6)調(diào)用DB.Ping以確認(rèn)連接到數(shù)據(jù)庫有效。在運行時, sql.Open可能不會立即連接,具體取決于驅(qū)動程序。您在Ping此處使用以確認(rèn) database/sql包可以在需要時連接。
(7)檢查來自Ping的錯誤,以防連接失敗。
(8)Ping如果連接成功,則打印一條消息。
文件的頂部現(xiàn)在應(yīng)該如下所示:
3、保存 main.go。
1、開始跟蹤 MySQL 驅(qū)動程序模塊作為依賴項。
使用go get 添加 github.com/go-sql-driver/mysql 模塊作為您自己模塊的依賴項。使用點參數(shù)表示“獲取當(dāng)前目錄中代碼的依賴項”。
2、在命令提示符下,設(shè)置Go 程序使用的DBUSER和DBPASS環(huán)境變量。
在 Linux 或 Mac 上:
在 Windows 上:
3、在包含 main.go 的目錄中的命令行中,通過鍵入go run來運行代碼。
連接成功了!
接下來,您將查詢一些數(shù)據(jù)。
package?main
import?"fmt"
func?main()?{
var?a,?b,?c?int
fmt.Scanf("%d%d%d",?a,?b,?c)
fmt.Println(a?+?b?+?c)
}
希望采納!
查看表結(jié)構(gòu)的:desc (表名);創(chuàng)建表的create語句就是在plsql上按住Ctrl鍵點擊該表名然后在點擊這個頁面右下角的“查看sql“按鈕就可以看到了 ;不使用工具的話,先把表導(dǎo)出來然后在導(dǎo)進(jìn)去,導(dǎo)進(jìn)去的時候使用show=y、log這兩個選項,就可以查看了!