channel的关闭和广播机制测试
package cspimport ( "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 test0123456789PASSok 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 test0145678932PASSok 0.360s> */
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。