请感受一下协程的强大,使用了管道序列
package main
import (
"fmt"
"time"
)
//创建一个管道,用于写入数据
func writeChantest(writeChan chan int) {
for i := 0; i < 20; i++ {
writeChan <- i
fmt.Println("写入数据=", i)
time.Sleep(time.Second)
}
close(writeChan)
}
//创建管道,用于读取数据
func readChantest(writeChan chan int, exitChan chan bool) {
for { //死循环
n, ok := <-writeChan
if !ok {
break
}
fmt.Println("正在读取数据=", n)
time.Sleep(time.Second)
}
exitChan <- true
close(exitChan)
}
func main() {
//创建一个管道,用于写入数据
writeChan := make(chan int, 1)
exitChan := make(chan bool, 1)
go writeChantest(writeChan)
go readChantest(writeChan, exitChan)
for {
_, ok := <-exitChan //判断标志位是否变了,变表示里面已经结束了
if !ok {
break
}
}
time.Sleep(time.Second * 2) //主进程休眠两秒后结束
}