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

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

go語言標(biāo)志是啥 go語言的全稱

4bt能作為go語音的標(biāo)識符嗎

不能。和其它語言一樣,4bt關(guān)鍵字不能夠作標(biāo)識符使用。標(biāo)識符標(biāo)識符是指Go語言對各種變量、方法、函數(shù)等命名時(shí)使用的字符序列,標(biāo)識符由若干個(gè)字母。

創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元武陵源做網(wǎng)站,已為上家服務(wù),為武陵源各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220

channel使用

【譯文】 原文地址

channel是Go語言的一個(gè)標(biāo)志性特性,為go協(xié)程之間的數(shù)據(jù)交互提供一種非常強(qiáng)大的方式,而不需要使用鎖機(jī)制。

本文將討論channel的兩個(gè)重要屬性,一個(gè)是控制協(xié)程間數(shù)據(jù)發(fā)送和接收,以及對channel本身控制。

首先討論下關(guān)閉的channel特性。一旦channel被關(guān)閉之后,就不能再繼續(xù)發(fā)送數(shù)據(jù)給該channel,但是還是可以繼續(xù)接收channel中的數(shù)據(jù)。如下所示:

output:

上述例子顯示即使ch在for循環(huán)之前已經(jīng)關(guān)閉,但還是可以正常的讀取緩存中的true值,讀完之后ok就會被賦值為false表示channel已經(jīng)關(guān)閉,而且value值為對應(yīng)channel類型bool的默認(rèn)零值false。只要不停地從關(guān)閉的channel接收,就會無限的返回默認(rèn)值和false??梢詫or循環(huán)次數(shù)改大點(diǎn)試試即可驗(yàn)證。

通過以上例子可以發(fā)現(xiàn),關(guān)閉的channel可以繼續(xù)接收讀取操作,這種特征是有用的。在使用range讀取帶緩存的channel時(shí)就會用到,一旦channel關(guān)閉,讀取完緩存中數(shù)據(jù)就會停止接收數(shù)據(jù)退出。

將前面的例子改為如下:

output:

上面的例子就沒有false打出來了。正好是寫入channel里面的兩個(gè)值。

channel與select結(jié)合更能發(fā)揮出其作用,讓我們看一個(gè)例子:

上面的例子,因?yàn)閒inish在主協(xié)程中發(fā)送之后,馬上就會在select中接收,并執(zhí)行done.Done()。主協(xié)程wait馬上會退出整個(gè)程序就結(jié)束。但是這里面存在一個(gè)問題,如果在select中沒有添加finish case的話,主協(xié)程就永遠(yuǎn)發(fā)送不了數(shù)據(jù)到finish這個(gè)channel,因?yàn)槠洳粠Ь彺妗_@里就可以通過將finish改成帶緩存的channel,或者可以讓select中的finish不會阻塞。

但是出現(xiàn)多個(gè)協(xié)程都在接收finish通道中的數(shù)據(jù)的話,就需要發(fā)送對應(yīng)協(xié)程數(shù)量的值到channel中才能解決上面的問題。但是具體有多少個(gè)協(xié)程這往往是不好確定的,因?yàn)橛行﹨f(xié)程可能是程序其他部分創(chuàng)建的。一個(gè)比較好的選擇就是通過使用關(guān)閉通道的方法來實(shí)現(xiàn)各協(xié)程能正常接收并結(jié)束。

如下所示:

output:

上面的例子就是使用了關(guān)閉的channel可以無限地接收到反饋數(shù)據(jù)。這樣每個(gè)協(xié)程都能從finish通道中讀到關(guān)閉信息并執(zhí)行done.Done()使得主協(xié)程wait能退出。并且不需要關(guān)注多少個(gè)協(xié)程數(shù),就能正確的讓所有協(xié)程讀到finish通道信息。

channel的這個(gè)特性,可以讓程序員無需關(guān)注后臺具體執(zhí)行協(xié)程個(gè)數(shù),確保每個(gè)協(xié)程都能接收到通道關(guān)閉信息,而無需擔(dān)心死鎖問題。

通過上面的例子我們也發(fā)現(xiàn)每個(gè)協(xié)程并不需要從通道中讀取對應(yīng)類型的數(shù)據(jù),只需讓接收操作能執(zhí)行就行,讓select不被阻塞。所以可以使用空結(jié)構(gòu)體類型,我們可以改成如下:

這里我們只關(guān)注通道是否關(guān)閉這個(gè)信號,而不需要關(guān)注通道里面的數(shù)據(jù),所以可使用空結(jié)構(gòu)體類型通道。

第二個(gè)要討論的是nil通道:如果定義了一個(gè)channel變量沒有被初始化,或者被賦值為nil,那么該chennel總是處于阻塞狀態(tài)。如下所示:

執(zhí)行結(jié)果為:

因?yàn)閏hannel為nil無法發(fā)送數(shù)據(jù),當(dāng)然也不能接收數(shù)據(jù):

這個(gè)似乎看起來不是很重要,但是如果你想使用關(guān)閉channel來等待多個(gè)channel關(guān)閉的話,這個(gè)特性就有用處了。先看下面的例子:

WaitMany()函數(shù)看起來好像是一個(gè)等待通道a和b關(guān)閉的好方法,但是存在一個(gè)問題。假設(shè)a通道先關(guān)閉,case -a就會變成非阻塞。因?yàn)閎closed還是false,程序就會進(jìn)入到一個(gè)死循環(huán)當(dāng)中,導(dǎo)致b通道永遠(yuǎn)無法確認(rèn)關(guān)閉。

一個(gè)安全的方法就是使用nil通道總是阻塞的特點(diǎn),如下所示:

上面的例子我們在WaitMany函數(shù)當(dāng)中,當(dāng)a或者b關(guān)閉時(shí),case可執(zhí)行了將對應(yīng)的通道賦值為nil,讓其阻塞這樣就可以等待另一個(gè)通道關(guān)閉。當(dāng)nil通道是select語句的一部分時(shí),它會被有效地忽略,因此nil通道a會從select中刪除它,只留下b,直到它被關(guān)閉,退出循環(huán)。

總之,closed和nil通道的簡單屬性對寫出優(yōu)質(zhì)的go程序是很有用的,可以用來創(chuàng)建高并發(fā)程序。

go語言適合做什么

go語言適用的領(lǐng)域有:

Go語言主要用作服務(wù)器端開發(fā),其定位是用來開發(fā)“大型軟件”的,適合于很多程序員一起開發(fā)大型軟件,并且開發(fā)周期長,支持云計(jì)算的網(wǎng)絡(luò)服務(wù)。

Go語言作為服務(wù)器編程語言,很適合處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)、分布式系統(tǒng)、數(shù)據(jù)庫代理等;網(wǎng)絡(luò)編程方面,Go語言廣泛應(yīng)用于Web應(yīng)用、API應(yīng)用、下載應(yīng)用等;除此之外,Go語言還可用于內(nèi)存數(shù)據(jù)庫和云平臺領(lǐng)域,目前國外很多云平臺都是采用Go開發(fā)。

Go語言能夠讓程序員快速開發(fā),并且在軟件不斷的增長過程中,它能讓程序員更容易地進(jìn)行維護(hù)和修改。它融合了傳統(tǒng)編譯型語言的高效性和腳本語言的易用性和富于表達(dá)性。

Go語言作為一門大型項(xiàng)目開發(fā)語言,在很多大公司相繼使用,甚至完全轉(zhuǎn)向Go開發(fā),其中代表有Google、Facebook、騰訊、百度、阿里巴巴、京東、小米以及360、美團(tuán)、滴滴以及新浪等,因此,Go語言的開發(fā)前景還是很不錯(cuò)的!

go是啥 語言.

GO語言由Google公司開發(fā),并于2009年開源,對比Java、Python、C等語言,GO尤其擅長并發(fā)編程,性能堪比C語言,開發(fā)效率比肩Python,被譽(yù)為21世紀(jì)的C語言。GO語言在云計(jì)算、大數(shù)據(jù)、微服務(wù)、高并發(fā)領(lǐng)域,應(yīng)用非常廣泛。BAT大廠正在把GO作為新項(xiàng)目開發(fā)的首選語言。

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,需要?jiǎng)?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/目錄中都有自己的文件。

如果要?jiǎng)?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è)置將為其建議給定命令的名稱。這允許對在字符串距離方面不接近的字符串提供建議,但在您的一組命令中是有意義的,并且對于某些您不需要?jiǎng)e名的字符串。例子:

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

庫卡如何定義標(biāo)識符

在編程語言中標(biāo)識符就是程序員定義的具有特殊意義的詞,比如變量名、常量名、函數(shù)名等等。 Go語言中標(biāo)識符由字母數(shù)字和_(下劃線)組成,并且只能以字母和_開頭。


網(wǎng)站標(biāo)題:go語言標(biāo)志是啥 go語言的全稱
鏈接URL:http://weahome.cn/article/docjsej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部