開發環境:windows7 64位、編輯器:sublime text3 windows
簡要說明:Go中能夠建立有緩衝的chan(好比: c1:=make(chan int,4)就是緩衝區大小爲4的chan了 ),也能夠建立沒有緩衝的chan(好比: c2:=make(chan int)就是沒有緩衝的chan)。 併發
代碼以下,代碼中有註釋: 編輯器
package main
import (
"fmt"
)
func main() {
c := make(chan int, 2) //建立帶有緩衝的chanel,緩衝大小是2
//這樣調用函數,那麼f1和f2就是併發執行了
go f1(c) //將參數c傳遞給f1()
go f2(c) //將參數c傳遞給f2()
c1 := <-c
c2 := <-c //main函數只有從c中接收到倆個值,纔會退出main(),不然main()中會阻塞這那直到c中有數據能夠接收
fmt.Printf("c1:%d c2:%d", c1, c2)
}
func f1(c chan int) { // chan int 表示參數的類型是存儲int類型的chanel
c <- 1 //向這個chanel中傳入1,以後main()中就會接受到1
}
func f2(c chan int) { // chan int 表示參數的類型是存儲int類型的chanel
c <- 2 //向這個chanel中傳入2,以後main()中就會接收到2
}
函數
運行結果如圖所示(結果顯示c1的值是2而不是1,c2的值是1而不是2): 開發