func Count(ch chan int, value int){
//ch <- value 寫
fmt.Println("im Count: ",value)
ch <- value
fmt.Println("write")
}
func main() {
//var chanName chan ElementType
//eg:var ch chan int
//eg:var m map[string] chan bool
//eg: ch := make(chan int)
chs := make([]chan int, 3)
for i := 0; i < 3; i++ {
chs[i] = make(chan int)
go Count(chs[i], i)
}
for _, ch := range chs {
//讀
val := <-ch
fmt.Println("im main vlaue:", val)
}
}
向channel寫入數據通常會導致程序阻塞,直到有其他goroutine從這個channel中讀取數據。
如果channel之前沒有寫入數據,那么從channel中讀取數據也會導致程序阻塞,直到channel中被寫入數據為止。
輸出結果順序不一定,但一定是有讀才有寫,先寫后讀。
API server listening at: 127.0.0.1:20592
im Count: 2
im Count: 0
write
im main vlaue: 0
im Count: 1
write
im main vlaue: 1
im main vlaue: 2