go 管道学习思考
package main import ( "fmt" "sync" ) /* channel提供了一种通信机制 定向 消息队列 */ var wgt sync.WaitGroup //消费者 func cousumer(queue chan string){ defer wgt.Done() data :=<-queue fmt.Println(data) } func main(){ //静态语言 需要申明类型 //定义一个channel var msg chan string //初始化这个channel 初始化有两种方式: 1.无缓冲空间的管道 2.有缓存空间的管道 //msg=make(chan int)//没有缓冲空间的管道 fatal error: all goroutines are asleep - deadlock! msg=make(chan string,1)//有缓存空间的 如果缓冲空间满了也会报 fatal error: all goroutines are asleep - deadlock! // go 语言中使用make初始化有三种 1.slice 2.map 3.channel msg <- "s"//把字符串s放入 channel中 //msg<-"ww" //管道看起来好像是有空间的数组 // data :=<- msg //将箭头右边的值放到左边 //通道数据读取完之后,就不能在读取了 //加协程 waitGroup的目的是为了控制流程,使主进程和子进程在子进程全部完成之后,结束主进程 wgt.Add(1) go cousumer(msg) wgt.Wait() //fmt.Println(data) }