一、channel
线程通信在每个编程语言中都是重难点,在Golang中提供了语言级别的goroutine之间通信:channel
channel不同的翻译资料叫法不一样.常见的几种叫法
管道
信道
通道...名称为ch)
ch <- 值 //向ch中添加一个值
<- ch //从ch中取出一个值
a:=<-ch //从ch中取出一个值并赋值给a
a,b:=<-ch//从ch中取出一个值赋值给a,如果ch已经关闭或...ch中没有值,b为false
二、代码示例
简单无缓存通道代码示例
此代码中如果没有从channel中取值c,d=<-ch语句,程序结束时go func并没有执行
下面代码示例演示了同步操作,类似与WaitGroup...功能,保证程序结束时goroutine已经执行完成
向goroutine中添加内容的代码会阻塞goroutine执行,所以要把ch<-1放入到goroutine有效代码最后一行
无论是向channel存数据还是取数据都会阻塞...//关闭ch控制台输出:0 false
close(ch)
}()
c, d := <-ch
fmt.Println(c, d)
fmt.Println("程序执行结束