Go提供了一種稱為通道的機(jī)制,用于在goroutine之間共享數(shù)據(jù)。當(dāng)您作為goroutine執(zhí)行并發(fā)活動(dòng)時(shí),需要在goroutine之間共享資源或數(shù)據(jù),通道充當(dāng)goroutine之間的管道(管道)并提供一種機(jī)制來(lái)保證同步交換。
創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營(yíng)銷推廣、網(wǎng)站重做改版、黃石網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、成都商城網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為黃石等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
根據(jù)數(shù)據(jù)交換的行為,有兩種類型的通道:無(wú)緩沖通道和緩沖通道。無(wú)緩沖通道用于執(zhí)行g(shù)oroutine之間的同步通信,而緩沖通道用于執(zhí)行異步通信。無(wú)緩沖通道保證在發(fā)送和接收發(fā)生的瞬間兩個(gè)goroutine之間的交換。緩沖通道沒(méi)有這樣的保證。
通道由make函數(shù)創(chuàng)建,該函數(shù)指定chan關(guān)鍵字和通道的元素類型。
這是創(chuàng)建無(wú)緩沖和緩沖通道的代碼塊:
語(yǔ)法
使用內(nèi)置函數(shù)make創(chuàng)建無(wú)緩沖和緩沖通道。make的第一個(gè)參數(shù)需要關(guān)鍵字chan,然后是通道允許交換的數(shù)據(jù)類型。
這是將值發(fā)送到通道的代碼塊需要使用-運(yùn)算符:
語(yǔ)法
一個(gè)包含5個(gè)值的緩沖區(qū)的字符串類型的goroutine1通道。然后我們通過(guò)通道發(fā)送字符串“Australia”。
這是從通道接收值的代碼塊:
語(yǔ)法
- 運(yùn)算符附加到通道變量(goroutine1)的左側(cè),以接收來(lái)自通道的值。
在無(wú)緩沖通道中,在接收到任何值之前沒(méi)有能力保存它。在這種類型的通道中,發(fā)送和接收goroutine在任何發(fā)送或接收操作完成之前的同一時(shí)刻都準(zhǔn)備就緒。如果兩個(gè)goroutine沒(méi)有在同一時(shí)刻準(zhǔn)備好,則通道會(huì)讓執(zhí)行其各自發(fā)送或接收操作的goroutine首先等待。同步是通道上發(fā)送和接收之間交互的基礎(chǔ)。沒(méi)有另一個(gè)就不可能發(fā)生。
在緩沖通道中,有能力在接收到一個(gè)或多個(gè)值之前保存它們。在這種類型的通道中,不要強(qiáng)制goroutine在同一時(shí)刻準(zhǔn)備好執(zhí)行發(fā)送和接收。當(dāng)發(fā)送和接收阻塞時(shí)也有不同的條件。只有當(dāng)通道中沒(méi)有要接收的值時(shí),接收才會(huì)阻塞。僅當(dāng)沒(méi)有可用緩沖區(qū)來(lái)放置正在發(fā)送的值時(shí),發(fā)送才會(huì)阻塞。
實(shí)例
運(yùn)行結(jié)果
Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開(kāi)發(fā)的一種靜態(tài)強(qiáng)類型、編譯型語(yǔ)言。Go 語(yǔ)言語(yǔ)法與 C 相近,但功能上有:內(nèi)存安全,GC(垃圾回收),結(jié)構(gòu)形態(tài)及 CSP-style 并發(fā)計(jì)算。
go語(yǔ)言特點(diǎn)
go語(yǔ)言的應(yīng)用領(lǐng)域
哪些公司(項(xiàng)目)在使用go語(yǔ)言
下載開(kāi)發(fā)包
windows下安裝
1.打開(kāi)下載的msi可執(zhí)行文件,根據(jù)提示進(jìn)行安裝。默認(rèn)會(huì)安裝在c:/Program Files/go目錄下面。會(huì)自動(dòng)添加go可執(zhí)行文件環(huán)境變量。
2.驗(yàn)證安裝情況
a.打開(kāi)命令行
b. 輸入$ go version
linux下安裝
1.在/usr/local/下面創(chuàng)建一個(gè)目錄go
2.下載壓縮文件到該目錄(/usr/local/go),并解壓縮
3.添加/usr/local/go/bin到PATH環(huán)境變量,打開(kāi)$HOME/.profile 或者/etc/profile輸入如下內(nèi)容:
4.執(zhí)行如下命令使得配置文件及時(shí)生效
驗(yàn)證
1.如果你的mac有Homebrew包管理工具,可以使用它來(lái)安裝
2.如果沒(méi)有下載mac安裝包,根據(jù)提示安裝
3.默認(rèn)安裝在/usr/local/go下面
4.設(shè)置環(huán)境變量,同Linux
go語(yǔ)言中的if語(yǔ)句和其他語(yǔ)言中的類似,都是根據(jù)給定的條件表達(dá)式運(yùn)算結(jié)果來(lái),判斷執(zhí)行流程。
注意:在go語(yǔ)言中 布爾表達(dá)式不用使用括號(hào)。
根據(jù)布爾值flag判斷
程序運(yùn)行結(jié)果
初始變量可以聲明在布爾表達(dá)式里面,注意它的作用域
程序運(yùn)行結(jié)果
注意:不能使用0或非0表示真假
go語(yǔ)言if語(yǔ)句使用提示:
go語(yǔ)言中的if else語(yǔ)句可以根據(jù)給定條件二選一。
比較兩個(gè)數(shù)的大小
運(yùn)行結(jié)果
判斷一個(gè)數(shù)是奇數(shù)還是偶數(shù)
運(yùn)行結(jié)果
判斷一個(gè)人是否成年
運(yùn)行結(jié)果
特殊寫(xiě)法,在if前面添加執(zhí)行語(yǔ)句
運(yùn)行結(jié)果
go語(yǔ)言if語(yǔ)句使用提示:
go語(yǔ)言if語(yǔ)句可以進(jìn)行多重嵌套使用,進(jìn)行多重判斷。
根據(jù)分?jǐn)?shù)判斷等級(jí)
運(yùn)行結(jié)果
同樣也可以寫(xiě)成這樣
運(yùn)行結(jié)果
輸入星期幾的第一個(gè)字母來(lái)判斷一下是星期幾,如果第一個(gè)字母一樣,則繼續(xù)判斷第二個(gè)字母
運(yùn)行結(jié)果
go語(yǔ)言if語(yǔ)句可以嵌套多級(jí)進(jìn)行判斷。
判斷三個(gè)數(shù)的大小
運(yùn)行結(jié)果
判斷男生還是女生,還有是否成年
運(yùn)行結(jié)果
函數(shù)的go語(yǔ)言中的一級(jí)公民,我們把所有的功能單元都定義在函數(shù)中,可以重復(fù)使用。函數(shù)包含函數(shù)的名稱、參數(shù)列表和返回值類型,這些構(gòu)成了函數(shù)的簽名(signature)。
函數(shù)在使用之前必須先定義,可以調(diào)用函數(shù)來(lái)完成某個(gè)任務(wù)。函數(shù)可以重復(fù)調(diào)用,從而達(dá)到代碼重用。
go語(yǔ)言函數(shù)定義語(yǔ)法
語(yǔ)法解析:
go語(yǔ)言函數(shù)定義實(shí)例
定義一個(gè)求和函數(shù)
定義一個(gè)比較兩個(gè)數(shù)大小的函數(shù)
go語(yǔ)言函數(shù)調(diào)用
當(dāng)我們要完成某個(gè)任務(wù)時(shí),可以調(diào)用函數(shù)來(lái)完成。調(diào)用函數(shù)要傳遞參數(shù),如何有返回值可以獲得返回值。
運(yùn)行結(jié)果