go的goroutine和channel的简单使用案例

61 阅读1分钟
  • 开启一个writeDatagoroutine,向channel50个整数
  • 开启一个ReadDatagoroutine,向channel读取WriteData写入的数据
  • writeDataReadData要操作同一个channel
  • 主线程要等到writeDataReadData都完成才能退出
package main

func WriteData(intchan chan int) {
	//错误处理机制防止死锁,不影响读取
	defer close(intchan)

	for i := 0; i < 50; i++ {
		intchan <- i
	}

}

func ReadData(intchan chan int, exitchan chan bool) {
	//错误处理机制防止死锁,不影响读取
	defer close(exitchan)

	for {

		//从管道取数据,返回具体数据和是否取成功
		_, ok := <-intchan
		if !ok {
			// 如果读不出数据,说明读完了
			break
		}

	}
	exitchan <- true

}

func main() {

	//创建两个管道
	intchan := make(chan int, 50)
	exitchan := make(chan bool, 1)

	go WriteData(intchan)
	go ReadData(intchan, exitchan)

	<-exitchan

	for {

		if _, ok := <-exitchan; !ok {
			close(exitchan)
			break
		}

	}

}