go buf chan

用死循环的方式从ch中获取数据, 但是得自己判断ch是否已经取空了

点击查看代码
package main

import (
	"fmt"
)

func producer(chnl chan int) {
	for i := 0; i < 10; i++ {
		chnl <- i
	}
	defer close(chnl) // chnl塞完数据之后,必须关闭,否则取时不知道已关闭,会持续取而报错fatal error: all goroutines are asleep - deadlock!
}

func main() {
	ch := make(chan int)
	go producer(ch)
	for {  // 用死循环的方式从ch中获取数据, 但是得自己判断ch是否已经取空了
		v, ok := <-ch
		if ok == false { // ch已经关闭了, ok == false
			fmt.Println("chan is closed")
			break
		}
		fmt.Println("Received ", v)
	}
}

posted @ 2022-03-10 21:49  ty1539  阅读(12)  评论(0编辑  收藏  举报