//示例说明如下//1. 创建了10个通道,并发起10个协程//2. 通道没有设置缓存大小,所以消息发送是会阻塞的,直到接收方准备好funcCount(ch chanint, id int){
fmt.Printf("count function %v", id)
fmt.Println()
ch <-1}funcmain(){var chs [10]chanint//chs := make([]chan int, 10)for i :=0; i <10; i++{
chs[i]=make(chanint)goCount(chs[i], i)}for_, ch :=range chs {<-ch
}}
chan实现数据传递
funcAdd(ch chanint, one int, two int){
fmt.Printf("count function %v, %v", one, two)
fmt.Println()
ans := one + two
for i :=0; i <2; i++{
ch <- ans
}}funcmain(){var chs [10]chanint//chs := make([]chan int, 10)for i :=0; i <10; i++{
chs[i]=make(chanint)goAdd(chs[i], i, i)}var sum =0for_, ch :=range chs {
ans :=<-ch
sum += ans
}
fmt.Printf("main function %v", sum)
fmt.Println()}
chan实现并发任务协调
funcAdd(ch chanint, one int, two int){
fmt.Printf("count function %v, %v", one, two)
fmt.Println()
ans := one + two
for i :=0; i <2; i++{
ch <- ans
}}funcmain(){
ch :=make(chanint,10)for i :=0; i <10; i++{goAdd(ch, i, i)}
stopChan :=make(chan os.Signal)
signal.Notify(stopChan, syscall.SIGINT, syscall.SIGTERM)var sum =0for{select{case_=<-stopChan:
fmt.Println(fmt.Sprintf("stopChan exected"))goto ForEnd
case c :=<-ch:
sum += c
fmt.Println(fmt.Sprintf("ch exected"))}}
ForEnd:
fmt.Printf("main function %v", sum)}