package csp import ( "fmt" "sync" "testing" ) /* func dataProducer(ch chan int, wg *sync.WaitGroup) { go func() { for i := 0; i < 10; i++ { ch <- i } wg.Done() }() } func dataReceiver(ch chan int, wg *sync.WaitGroup) { go func() { for i := 0; i < 10; i++ { data := <-ch fmt.Println(data) } wg.Done() }() } func TestChannelClose(t *testing.T) { ch := make(chan int) var wg sync.WaitGroup wg.Add(1) dataProducer(ch, &wg) wg.Add(1) dataReceiver(ch, &wg) wg.Wait() } */ func dataProducer(ch chan int, wg *sync.WaitGroup) { go func() { for i := 0; i < 10; i++ { ch <- i } close(ch) //没有加closepanic了 wg.Done() }() } func dataReceiver(ch chan int, wg *sync.WaitGroup) { go func() { for { if data, ok := <-ch; ok { fmt.Println(data) } else { break } } wg.Done() }() } func TestChannelClose(t *testing.T) { ch := make(chan int) var wg sync.WaitGroup wg.Add(1) dataProducer(ch, &wg) wg.Add(1) dataReceiver(ch, &wg) // wg.Add(1) // dataReceiver(ch, &wg) // wg.Add(1) // dataReceiver(ch, &wg) wg.Wait() } /*>go test 0 1 2 3 4 5 6 7 8 9 PASS ok 0.249s > */ /* func TestChannelClose(t *testing.T) { ch := make(chan int) var wg sync.WaitGroup wg.Add(1) dataProducer(ch, &wg) wg.Add(1) dataReceiver(ch, &wg) wg.Add(1) dataReceiver(ch, &wg) wg.Add(1) dataReceiver(ch, &wg) wg.Wait() } >go test 0 1 4 5 6 7 8 9 3 2 PASS ok 0.360s > */
channel的关闭和广播机制测试
原创xingzhehxiang ©著作权
©著作权归作者所有:来自51CTO博客作者xingzhehxiang的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
channel 实现机制
Go 中 channel 的实现机制
数据 环形队列 写数据 -
Android Kotlin Channel的关闭
要等到结束后才能完全关闭。
android kotlin java sed Test