channel通道关闭可以通过bool值来判断
package channel_clos
import (
"fmt"
"sync"
"testing"
)
func dataConsumer(ch chan int,wg *sync.WaitGroup){
go func() {
for i:=0 ; i<10; i++{
if data,ok := <-ch;ok{
fmt.Println(data)
}else{
fmt.Println("false")
}
}
wg.Done()
}()
}
func dataProducer(ch chan int,wg *sync.WaitGroup){
go func() {
for i:=0 ; i<10; i++{
ch<-i
}
close(ch)
wg.Done()
}()
}
func TestConsumer(t *testing.T){
var wg sync.WaitGroup
ch := make(chan int,1)
wg.Add(1)
dataProducer(ch,&wg)
wg.Add(1)
dataConsumer(ch,&wg)
wg.Wait()
}
该博客探讨了Go语言中并发编程的一个关键概念——通道(Channel)的关闭和数据传递。通过示例代码展示了如何在生产者和消费者模型中使用通道,并通过bool值判断通道是否关闭。在测试用例中,数据Producer函数往通道中发送10个整数后关闭通道,而数据Consumer函数则从通道接收数据直到通道关闭。这个例子对于理解Go语言的并发控制和错误处理机制非常有帮助。
295

被折叠的 条评论
为什么被折叠?



