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