温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

channel的关闭和广播机制测试

发布时间:2020-07-29 09:47:11 来源:网络 阅读:399 作者:xingzhehxiang 栏目:编程语言
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

> */


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI