• 
    

      <address id="upfr9"><pre id="upfr9"><strike id="upfr9"></strike></pre></address>
      1. <address id="upfr9"><tr id="upfr9"></tr></address><dl id="upfr9"></dl>

        go語言基礎(chǔ)教程84講 go語言視頻教程

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

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

        創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),羅湖企業(yè)網(wǎng)站建設(shè),羅湖品牌網(wǎng)站建設(shè),網(wǎng)站定制,羅湖網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,羅湖網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

        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兼容性的同時維護相同的接口。

        使用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)用于該特定命令。

        默認情況下,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默認是可選的,如果希望命令在未設(shè)置標(biāo)志時報告錯誤,請根據(jù)需要進行標(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)志定義之外,不需要任何東西。

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

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

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

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

        您可以提供自己的使用函數(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語言的結(jié)構(gòu)體

        作為C語言家族的一員,go和c一樣也支持結(jié)構(gòu)體??梢灶惐扔趈ava的一個POJO。

        在學(xué)習(xí)定義結(jié)構(gòu)體之前,先學(xué)習(xí)下定義一個新類型。

        新類型 T1 是基于 Go 原生類型 int 定義的新自定義類型,而新類型 T2 則是 基于剛剛定義的類型 T1,定義的新類型。

        這里要引入一個底層類型的概念。

        如果一個新類型是基于某個 Go 原生類型定義的, 那么我們就叫 Go 原生類型為新類型的底層類型

        在上面的例子中,int就是T1的底層類型。

        但是T1不是T2的底層類型,只有原生類型才可以作為底層類型,所以T2的底層類型還是int

        底層類型是很重要的,因為對兩個變量進行顯式的類型轉(zhuǎn)換,只有底層類型相同的變量間才能相互轉(zhuǎn)換。底層類型是判斷兩個類型本質(zhì)上是否相同的根本。

        這種類型定義方式通常用在 項目的漸進式重構(gòu),還有對已有包的二次封裝方面

        類型別名表示新類型和原類型完全等價,實際上就是同一種類型。只不過名字不同而已。

        一般我們都是定義一個有名的結(jié)構(gòu)體。

        字段名的大小寫決定了字段是否包外可用。只有大寫的字段可以被包外引用。

        還有一個點提一下

        如果換行來寫

        Age: 66,后面這個都好不能省略

        還有一個點,觀察e3的賦值

        new返回的是一個指針。然后指針可以直接點號賦值。這說明go默認進行了取值操作

        e3.Age 等價于 (*e3).Age

        如上定義了一個空的結(jié)構(gòu)體Empty。打印了元素e的內(nèi)存大小是0。

        有什么用呢?

        基于空結(jié)構(gòu)體類型內(nèi)存零開銷這樣的特性,我們在日常 Go 開發(fā)中會經(jīng)常使用空 結(jié)構(gòu)體類型元素,作為一種“事件”信息進行 Goroutine 之間的通信

        這種以空結(jié)構(gòu)體為元素類建立的 channel,是目前能實現(xiàn)的、內(nèi)存占用最小的 Goroutine 間通信方式。

        這種形式需要說的是幾個語法糖。

        語法糖1:

        對于結(jié)構(gòu)體字段,可以省略字段名,只寫結(jié)構(gòu)體名。默認字段名就是結(jié)構(gòu)體名

        這種方式稱為 嵌入字段

        語法糖2:

        如果是以嵌入字段形式寫的結(jié)構(gòu)體

        可以省略嵌入的Reader字段,而直接訪問ReaderName

        此時book是一個各個屬性全是對應(yīng)類型零值的一個實例。不是nil。這種情況在Go中稱為零值可用。不像java會導(dǎo)致npe

        結(jié)構(gòu)體定義時可以在字段后面追加標(biāo)簽說明。

        tag的格式為反單引號

        tag的作用是可以使用[反射]來檢視字段的標(biāo)簽信息。

        具體的作用還要看使用的場景。

        比如這里的tag是為了幫助 encoding/json 標(biāo)準(zhǔn)包在解析對象時可以利用的規(guī)則。比如omitempty表示該字段沒有值就不打印出來。

        推薦一個GO語言教程,最好能從最基礎(chǔ)的開始?

        芝麻教程

        Go

        語言教程

        Go

        是一個開源的編程語言,它能讓構(gòu)造簡單、可靠且高效的軟件變得容易。

        Go是從2007年末由Robert

        Griesemer,

        Rob

        Pike,

        Ken

        Thompson主持開發(fā),后來還加入了Ian

        Lance

        Taylor,

        Russ

        Cox等人,并最終于2009年11月開源,在2012年早些時候發(fā)布了Go

        1穩(wěn)定版本?,F(xiàn)在Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個活躍的社區(qū)。

        怎樣學(xué)習(xí)go語言?

        如果有其他語言基礎(chǔ)的話,直接類比學(xué)習(xí)就好了。如果沒有話那就先得熟悉編程思維,在掌握語言具體用法.

        用 Go 編程的感覺很棒。庫程序里有我想要的一切,總體實現(xiàn)較為完善。學(xué)習(xí)體驗也十分順暢,不得不說,Go 是一種經(jīng)過精心設(shè)計的實用性語言。舉個例子:一旦你知悉了 Go 的語法,就能將其他語言中慣用法延續(xù)到 Go 中。只要你學(xué)會一些 Go,就可以相對輕易地推測 Go 語言的其他特性。憑借一些來自其他語言的知識,我能夠閱讀并理解 Go 代碼,而不需要過多的搜索

        GO語言是什么語言?我們應(yīng)該怎么學(xué)?

        Go語言是谷歌推出的一種全新的編程語言,可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性。谷歌首席軟件工程師羅布派克(Rob Pike)說:我們之所以開發(fā)Go,是因為過去10多年間軟件開發(fā)的難度令人沮喪。

        Go是谷歌2009發(fā)布的第二款編程語言。2009年7月份,谷歌曾發(fā)布了Simple語言,它是用來開發(fā)Android應(yīng)用的一種BASIC語言.

        北京時間2010年1月10日,Go語言摘得了TIOBE公布的2009年年度大獎。該獎項授予在2009年市場份額增長最多的編程語言。

        谷歌資深軟件工程師羅布·派克(Rob Pike)表示,"Go讓我體驗到了從未有過的開發(fā)效率。"派克表示,今天的C++或C一樣,Go是一種系統(tǒng)語言。他解釋道,"使用它可以進行快速開發(fā),同時它還是一個真正的編譯語言,我們之所以現(xiàn)在將其開源,原因是我們認為它已經(jīng)非常有用和強大。"

        2007年,谷歌把Go作為一個20%項目開始研發(fā),即讓員工抽出本職工作之外時間的20%, 投入在該項目上。除了派克外,該項目的成員還有其他谷歌工程師也參與研發(fā)。

        派克表示,編譯后Go代碼的運行速度與C語言非常接近,而且編譯速度非??欤拖裨谑褂靡粋€交互式語言?,F(xiàn)有編程語言均未專門對多核處理器進行優(yōu)化。Go就是谷歌工程師為這類程序編寫的一種語言。它不是針對編程初學(xué)者設(shè)計的,但學(xué)習(xí)使用它也不是非常困難。Go支持面向?qū)ο?,而且具有真正的閉包(closures)和反射 (reflection)等功能。

        在學(xué)習(xí)曲線方面,派克認為Go與Java類似,對于Java開發(fā)者來說,應(yīng)該能夠輕松學(xué)會 Go。之所以將Go作為一個開源項目發(fā)布,目的是讓開源社區(qū)有機會創(chuàng)建更好的工具來使用該語言,例如 Eclipse IDE中的插件。

        在谷歌公開發(fā)布的所有網(wǎng)絡(luò)應(yīng)用中,均沒有使用Go,但是谷歌已經(jīng)使用該語言開發(fā)了幾個內(nèi)部項目。派克表示,Go是否會對谷歌即將推出的Chrome OS產(chǎn)生影響,還言之尚早,不過Go的確可以和Native Client配合使用。他表示"Go可以讓應(yīng)用完美的運行在瀏覽器內(nèi)。"例如,使用Go可以更高效的實現(xiàn)Wave,無論是在前端還是后臺。

        Go 同時具有兩種編譯器,一種是建立在GCC基礎(chǔ)上的Gccgo,另外一種是分別針對64位x64和32位x86計算機的一套編譯器(6g和8g)。谷歌目前正在研發(fā)其對ARM芯片和Android設(shè)備的支持。派克表示,"Android手機存在的問題是,我們一直沒有一個數(shù)學(xué)協(xié)處理器。"

        分享題目:go語言基礎(chǔ)教程84講 go語言視頻教程
        本文來源:http://www.jbt999.com/article18/hjjodp.html

        成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站營銷、網(wǎng)站設(shè)計公司、網(wǎng)站收錄、虛擬主機

        廣告

        聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

        外貿(mào)網(wǎng)站制作

      2. 
        

          <address id="upfr9"><pre id="upfr9"><strike id="upfr9"></strike></pre></address>
          1. <address id="upfr9"><tr id="upfr9"></tr></address><dl id="upfr9"></dl>
            欧美人妖乱伦 | 欧美一区二区三区婷婷五月 | 日本亚洲色a | 伊人网在线观看了 | 豆花成人版视频WWW18 | 欧美高清中文字幕第一页 | 日韩一区免费 | 诱咪一区二区三区四区 | 久久无码鲁丝片午夜精品 | 免费看毛片网站 |