免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

go語言打印金字塔教程 C語言for循環打印金字塔圖形

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

cobra是一個提供簡單接口來創建強大的現代CLI界面的庫類似git git tools,cobra也是一個應用程序,它會生成你的應用程序的腳手架來快速開發基于cobra的應用程序

成都創新互聯公司專注于企業營銷型網站建設、網站重做改版、漢源網站定制設計、自適應品牌網站建設、H5高端網站建設電子商務商城網站建設、集團公司官網建設、外貿網站制作、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為漢源等各大城市提供網站開發制作服務。

cobra提供:

cobra建立在命令、參數、標志的結構之上

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

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

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

一些真實世界的好例子可以更好地說明這一點

kubectl 命令更能體現APPNAME 動詞 名詞 形容詞

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

這個命令中,我們告訴git 克隆url

命令是應用程序的中心點,應用程序支持的每一個交互都包含在一個命令中,命令可以有子命令,也可以運行操作

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

更多關于cobra.Command

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

在上面的命令中,port是標志

標志的功能由 pflag library 提供,pflag library是flag標準庫的一個分支,在添加POSIX兼容性的同時維護相同的接口。

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

下一步,引入cobra到應用程序中

雖然歡迎您提供自己的組織,但通常基于Cobra的應用程序將遵循以下組織結構:

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

使用cobra生成器

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

這兒 你可以發現關于cobra的更多信息

要手動實現cobra,需要創建一個main.go 和rootCmd文件,可以根據需要提供其他命令

Cobra不需要任何特殊的構造器。只需創建命令。

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

在init()函數中定義標志和處理配置

例子如下,cmd/root.go:

創建main.go

使用root命令,您需要讓主函數執行它。為清楚起見,Execute應該在根目錄下運行,盡管它可以在任何命令上調用。

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

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

如果要創建版本命令,可以創建cmd/version.go并用以下內容填充它:

如果希望將錯誤返回給命令的調用者,可以使用RunE。

然后可以在execute函數調用中捕獲錯誤。

標志提供修飾符來控制操作命令的操作方式。

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

有兩種不同的方法來分配標志。

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

也可以在本地分配一個標志,該標志只應用于該特定命令。

默認情況下,Cobra只解析目標命令上的本地標志,而忽略父命令上的任何本地標志。通過啟用Command.TraverseChildren,Cobra將在執行目標命令之前解析每個命令上的本地標志。

使用viper綁定標志

在本例中,持久標志author與viper綁定。注意:當用戶未提供--author標志時,變量author將不會設置為config中的值。

更多關于 viper的文檔

Flags默認是可選的,如果希望命令在未設置標志時報告錯誤,請根據需要進行標記:

持久性Flags

可以使用命令的Args字段指定位置參數的驗證。

內置了以下驗證器:

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

我們只為一個命令定義了一個標志。

有關標志的更多文檔,請訪問

對于一個更完整的例子更大的應用程序,請檢查 Hugo 。

當您有子命令時,Cobra會自動將help命令添加到應用程序中。當用戶運行“應用程序幫助”時,將調用此函數。此外,help還支持所有其他命令作為輸入。例如,您有一個名為“create”的命令,沒有任何附加配置;調用“app help create”時,Cobra將起作用。每個命令都會自動添加“-help”標志。

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

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

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

當用戶提供無效的標志或無效的命令時,Cobra通過向用戶顯示“用法”來響應。

你可以從上面的幫助中認識到這一點。這是因為默認幫助將用法作為其輸出的一部分嵌入。

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

如果在root命令上設置了version字段,Cobra會添加一個頂級的'--version'標志。運行帶有“-version”標志的應用程序將使用版本模板將版本打印到標準輸出。可以使用cmd.SetVersionTemplate(s string)函數自定義模板。

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

輸出:

當發生“未知命令”錯誤時,Cobra將打印自動建議。這使得Cobra在發生拼寫錯誤時的行為類似于git命令。例如:

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

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

or

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

Cobra可以基于子命令、標志等生成文檔。請在 docs generation文檔 中閱讀更多關于它的信息。

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

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

GO語言(十六):模糊測試入門(上)

本教程介紹了 Go 中模糊測試的基礎知識。通過模糊測試,隨機數據會針對您的測試運行,以嘗試找出漏洞或導致崩潰的輸入。可以通過模糊測試發現的一些漏洞示例包括 SQL 注入、緩沖區溢出、拒絕服務和跨站點腳本攻擊。

在本教程中,您將為一個簡單的函數編寫一個模糊測試,運行 go 命令,并調試和修復代碼中的問題。

首先,為您要編寫的代碼創建一個文件夾。

1、打開命令提示符并切換到您的主目錄。

在 Linux 或 Mac 上:

在 Windows 上:

2、在命令提示符下,為您的代碼創建一個名為 fuzz 的目錄。

3、創建一個模塊來保存您的代碼。

運行go mod init命令,為其提供新代碼的模塊路徑。

接下來,您將添加一些簡單的代碼來反轉字符串,稍后我們將對其進行模糊測試。

在此步驟中,您將添加一個函數來反轉字符串。

a.使用您的文本編輯器,在 fuzz 目錄中創建一個名為 main.go 的文件。

獨立程序(與庫相反)始終位于 package 中main。

此函數將接受string,使用byte進行循環 ,并在最后返回反轉的字符串。

此函數將運行一些Reverse操作,然后將輸出打印到命令行。這有助于查看運行中的代碼,并可能有助于調試。

e.該main函數使用 fmt 包,因此您需要導入它。

第一行代碼應如下所示:

從包含 main.go 的目錄中的命令行,運行代碼。

可以看到原來的字符串,反轉它的結果,然后再反轉它的結果,就相當于原來的了。

現在代碼正在運行,是時候測試它了。

在這一步中,您將為Reverse函數編寫一個基本的單元測試。

a.使用您的文本編輯器,在 fuzz 目錄中創建一個名為 reverse_test.go 的文件。

b.將以下代碼粘貼到 reverse_test.go 中。

這個簡單的測試將斷言列出的輸入字符串將被正確反轉。

使用運行單元測試go test

接下來,您將單元測試更改為模糊測試。

單元測試有局限性,即每個輸入都必須由開發人員添加到測試中。模糊測試的一個好處是它可以為您的代碼提供輸入,并且可以識別您提出的測試用例沒有達到的邊緣用例。

在本節中,您將單元測試轉換為模糊測試,這樣您就可以用更少的工作生成更多的輸入!

請注意,您可以將單元測試、基準測試和模糊測試保存在同一個 *_test.go 文件中,但對于本示例,您將單元測試轉換為模糊測試。

在您的文本編輯器中,將 reverse_test.go 中的單元測試替換為以下模糊測試。

Fuzzing 也有一些限制。在您的單元測試中,您可以預測Reverse函數的預期輸出,并驗證實際輸出是否滿足這些預期。

例如,在測試用例Reverse("Hello, world")中,單元測試將返回指定為"dlrow ,olleH".

模糊測試時,您無法預測預期輸出,因為您無法控制輸入。

但是,Reverse您可以在模糊測試中驗證函數的一些屬性。在這個模糊測試中檢查的兩個屬性是:

(1)將字符串反轉兩次保留原始值

(2)反轉的字符串將其狀態保留為有效的 UTF-8。

注意單元測試和模糊測試之間的語法差異:

(3)確保新包unicode/utf8已導入。

隨著單元測試轉換為模糊測試,是時候再次運行測試了。

a.在不進行模糊測試的情況下運行模糊測試,以確保種子輸入通過。

如果您在該文件中有其他測試,您也可以運行go test -run=FuzzReverse,并且您只想運行模糊測試。

b.運行FuzzReverse模糊測試,查看是否有任何隨機生成的字符串輸入會導致失敗。這是使用go test新標志-fuzz執行的。

模糊測試時發生故障,導致問題的輸入被寫入將在下次運行的種子語料庫文件中go test,即使沒有-fuzz標志也是如此。要查看導致失敗的輸入,請在文本編輯器中打開寫入 testdata/fuzz/FuzzReverse 目錄的語料庫文件。您的種子語料庫文件可能包含不同的字符串,但格式相同。

語料庫文件的第一行表示編碼版本。以下每一行代表構成語料庫條目的每種類型的值。由于 fuzz target 只需要 1 個輸入,因此版本之后只有 1 個值。

c.運行沒有-fuzz標志的go test; 新的失敗種子語料庫條目將被使用:

由于我們的測試失敗,是時候調試了。

GO語言(十一):開始使用多模塊工作區

本教程介紹 Go 中多模塊工作區的基礎知識。使用多模塊工作區,您可以告訴 Go 命令您正在同時在多個模塊中編寫代碼,并輕松地在這些模塊中構建和運行代碼。

在本教程中,您將在共享的多模塊工作區中創建兩個模塊,對這些模塊進行更改,并在構建中查看這些更改的結果。

本教程需要 go1.18 或更高版本。使用go.dev/dl中的鏈接確保您已在 Go 1.18 或更高版本中安裝了 Go 。

首先,為您要編寫的代碼創建一個模塊。

1、打開命令提示符并切換到您的主目錄。

在 Linux 或 Mac 上:

在 Windows 上:

2、在命令提示符下,為您的代碼創建一個名為工作區的目錄。

3、初始化模塊

我們的示例將創建一個hello依賴于 golang.org/x/example 模塊的新模塊。

創建你好模塊:

使用 . 添加對 golang.org/x/example 模塊的依賴項go get。

在 hello 目錄下創建 hello.go,內容如下:

現在,運行 hello 程序:

在這一步中,我們將創建一個go.work文件來指定模塊的工作區。

在workspace目錄中,運行:

該go work init命令告訴為包含目錄中模塊的工作空間go創建一個文件 。go.work./hello

該go命令生成一個go.work如下所示的文件:

該go.work文件的語法與go.mod相同。

該go指令告訴 Go 應該使用哪個版本的 Go 來解釋文件。它類似于文件中的go指令go.mod 。

該use指令告訴 Go在進行構建時hello目錄中的模塊應該是主模塊。

所以在模塊的任何子目錄中workspace都會被激活。

2、運行工作區目錄下的程序

在workspace目錄中,運行:

Go 命令包括工作區中的所有模塊作為主模塊。這允許我們在模塊中引用一個包,即使在模塊之外。在模塊或工作區之外運行go run命令會導致錯誤,因為該go命令不知道要使用哪些模塊。

接下來,我們將golang.org/x/example模塊的本地副本添加到工作區。然后,我們將向stringutil包中添加一個新函數,我們可以使用它來代替Reverse.

在這一步中,我們將下載包含該模塊的 Git 存儲庫的副本golang.org/x/example,將其添加到工作區,然后向其中添加一個我們將從 hello 程序中使用的新函數。

1、克隆存儲庫

在工作區目錄中,運行git命令來克隆存儲庫:

2、將模塊添加到工作區

該go work use命令將一個新模塊添加到 go.work 文件中。它現在看起來像這樣:

該模塊現在包括example.com/hello模塊和 `golang.org/x/example 模塊。

這將允許我們使用我們將在模塊副本中編寫的新代碼,而不是使用命令stringutil下載的模塊緩存中的模塊版本。

3、添加新功能。

我們將向golang.org/x/example/stringutil包中添加一個新函數以將字符串大寫。

將新文件夾添加到workspace/example/stringutil包含以下內容的目錄:

4、修改hello程序以使用該功能。

修改workspace/hello/hello.go的內容以包含以下內容:

從工作區目錄,運行

Go 命令在go.work文件指定的hello目錄中查找命令行中指定的example.com/hello模塊 ,同樣使用go.work文件解析導入golang.org/x/example。

go.work可以用來代替添加replace 指令以跨多個模塊工作。

由于這兩個模塊在同一個工作區中,因此很容易在一個模塊中進行更改并在另一個模塊中使用它。

現在,要正確發布這些模塊,我們需要發布golang.org/x/example 模塊,例如在v0.1.0. 這通常通過在模塊的版本控制存儲庫上標記提交來完成。發布完成后,我們可以增加對 golang.org/x/example模塊的要求hello/go.mod:

這樣,該go命令可以正確解析工作區之外的模塊。

怎樣學習GO語言?

golang學習比較簡單,不過任何一門語言都不是孤立存在的,在這里簡要說明一下golang開發的學習路線

1.golang基礎,包括go語言安裝,go語言語法,流程控制語句,函數,方法,面向對象概念,網絡編程,并發編程等

2.golang開發框架,包括beego,gin,Iris,Echo等

3.微服務開發

4.深入的話還可以學習算法部分。如果要接觸區塊鏈相關技術的話,還需要學習區塊鏈的加密算法等相關知識

5.如果要結合go實現應用的話,肯定離不開各種數據庫,比如關系型數據庫oracle、mysql,或者各類非關系型數據庫等等

6.如果需要開發界面的話,還需要學習網頁編程如html,javascript,vue,elementUI,bootstrap等網頁開發技術和框架。

7.在以上學習的基礎上還可以向架構方面深入學習。

鏈喬教育在線祝您學有所成。

金字塔魔方教程一步一步圖解

1、首先將金字塔魔方的角塊歸位,再隨意選定一個顏色將中心塊拼拼齊,如果選定黃色面為底面,那么沒有黃色的那個角塊對應的那個面就是黃色底面。

2、還原黃色底面,把黃色底面放在地面的位置,觀察上角塊的棱塊位置有沒有黃色棱塊。此時,整個金字塔底層兩個面塊的顏色決定了這一層的顏色。要先確定哪一面分別是什么顏色以黃紅色棱塊還原為例,先把要還原的黃紅棱塊的紅色塊和已知紅色面的底層面塊對好,向上轉右角塊,再向右轉上角塊,再把剛剛向上轉的右角塊恢復,也就是把右角塊向下轉。

3、再以黃綠棱塊為例,同樣的,先把要歸位的黃綠棱塊的黃色面和已知黃色面的底層黃色面塊對好,向上轉左角塊,向左轉上角塊,再向下轉左角塊。

4.再以黃藍棱塊為例,此時要還原的藍紅棱塊不再上角塊棱塊的位置,而在底層棱塊的位置,很簡單,只要把藍紅塊調換到我們所熟悉的位置就好。 向上轉左角塊,向右轉上角塊,向下轉左角塊。

5、當拼好一面時,就選擇另外一面開始拼魔方,比如紅色,將紅色按照上述的方法拼好之后會發現黃色面又被打亂。

6.這個時候就繼續選擇拼黃色面,最后就發現所有的面都已經拼好了。

GO語言有哪些優勢?怎樣入門?

1、學習曲線

它包含了類C語法、GC內置和工程工具。這一點非常重要,因為Go語言容易學習,所以一個普通的大學生花一個星期就能寫出來可以上手的、高性能的應用。在國內大家都追求快,這也是為什么國內Go流行的原因之一。

2、效率

Go擁有接近C的運行效率和接近PHP的開發效率,這就很有利的支撐了上面大家追求快速的需求。

3、出身名門、血統純正

之所以說Go語言出身名門,是因為我們知道Go語言出自Google公司,這個公司在業界的知名度和實力自然不用多說。Google公司聚集了一批牛人,在各種編程語言稱雄爭霸的局面下推出新的編程語言,自然有它的戰略考慮。而且從Go語言的發展態勢來看,Google對它這個新的寵兒還是很看重的,Go自然有一個良好的發展前途。我們看看Go語言的主要創造者,血統純正這點就可見端倪了。

4、自由高效:組合的思想、無侵入式的接口

Go語言可以說是開發效率和運行效率二者的完美融合,天生的并發編程支持。Go語言支持當前所有的編程范式,包括過程式編程、面向對象編程以及函數式編程。程序員們可以各取所需、自由組合、想怎么玩就怎么玩。

5、強大的標準庫

這包括互聯網應用、系統編程和網絡編程。Go里面的標準庫基本上已經是非常穩定了,特別是我這里提到的三個,網絡層、系統層的庫非常實用。

6、部署方便:二進制文件、Copy部署

我相信這一點是很多人選擇Go的最大理由,因為部署太方便了,所以現在也有很多人用Go開發運維程序。

7、簡單的并發

它包含了降低心智的并發和簡易的數據同步,我覺得這是Go最大的特色。之所以寫正確的并發、容錯和可擴展的程序如此之難,是因為我們用了錯誤的工具和錯誤的抽象,Go可以說這一塊做的相當簡單。

8、穩定性

Go擁有強大的編譯檢查、嚴格的編碼規范和完整的軟件生命周期工具,具有很強的穩定性,穩定壓倒一切。那么為什么Go相比于其他程序會更穩定呢?這是因為Go提供了軟件生命周期(開發、測試、部署、維護等等)的各個環節的工具,如go

tool、gofmt、go test。

當前名稱:go語言打印金字塔教程 C語言for循環打印金字塔圖形
分享路徑:http://m.newbst.com/article26/hpohcg.html

成都網站建設公司_創新互聯,為您提供服務器托管小程序開發標簽優化移動網站建設面包屑導航營銷型網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站托管運營