channel是golang語(yǔ)言級(jí)別提供的協(xié)程(goroutine)之間的通信方式。
goroutine運(yùn)行在相同的地址空間,因此訪問(wèn)共享內(nèi)存必須做好同步。那么goroutine之間如何進(jìn)行數(shù)據(jù)的通信呢,Go提供了一個(gè)很好的通信機(jī)制channel。channel可以與Unix shell 中的雙向管道做類比:可以通過(guò)它發(fā)送或者接收值。這些值只能是特定的類型:channel類型。定義一個(gè)channel時(shí),也需要聲明發(fā)送到channel的值的類型。
成都網(wǎng)絡(luò)公司-成都網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)十年經(jīng)驗(yàn)成就非凡,專業(yè)從事網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作,成都網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)頁(yè)制作,軟文營(yíng)銷,一元廣告等。十年來(lái)已成功提供全面的成都網(wǎng)站建設(shè)方案,打造行業(yè)特色的成都網(wǎng)站建設(shè)案例,建站熱線:18980820575,我們期待您的來(lái)電!
var chanName chan ElementType
var ch chan int
使用make,可以指定channel容量
ch = make(chan int)
channel通過(guò)操作符<-來(lái)接收和發(fā)送數(shù)據(jù)
默認(rèn)情況下,channel接收和發(fā)送數(shù)據(jù)都是阻塞的,除非另一端已經(jīng)準(zhǔn)備好,這樣就使得Goroutines同步變的更加的簡(jiǎn)單,而不需要顯式的lock。所謂阻塞,也就是如果讀取(value := <-ch)它將會(huì)被阻塞,直到有數(shù)據(jù)接收。其次,任何發(fā)送(ch<-5)將會(huì)被阻塞,直到數(shù)據(jù)被讀出。無(wú)緩沖channel是在多個(gè)goroutine之間同步很棒的工具。
ch <- v // 發(fā)送v的值到channel ch-> 寫(xiě)數(shù)據(jù)
v := <- ch // 從ch中接收數(shù)據(jù),并賦值給v ->讀數(shù)據(jù)
package main
import (
"fmt"
"strconv"
)
//定義一個(gè)加法函數(shù),傳入channel類型,每計(jì)算一次,quit加1
func Add(x, y int, quit chan int) {
z := x + y
fmt.Println(z)
//寫(xiě)數(shù)據(jù)
quit <- 1
}
//接受數(shù)據(jù),并賦值給我
func Read(ch chan int) {
value := <- ch
fmt.Println("value" + strconv.Itoa(value))
}
func Write(ch chan int) {
//ch <- 10
}
func main() {
//定義一個(gè)channel類型切片數(shù)組
chs := make([]chan int, 10)
//循環(huán)執(zhí)行加法函數(shù)
for i := 0; i < 10; i++ {
//拿取一個(gè)channel
chs[i] = make(chan int)
//執(zhí)行g(shù)oroutine和發(fā)送一個(gè)channel類型數(shù)據(jù)
go Add(i, i, chs[i])
}
for _, v := range chs {
//接口channel類型數(shù)據(jù)
<- v
}
}
網(wǎng)站欄目:golang并發(fā)編程之channel
網(wǎng)頁(yè)路徑:http://www.yijiale78.com/article24/jjpije.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、云服務(wù)器、企業(yè)建站、響應(yīng)式網(wǎng)站、靜態(tài)網(wǎng)站、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)