怎么听N个频道?(动态选择语句)

要开始执行两个 goroutine 的无限循环,我可以使用以下代码:


收到 msg 后,它将启动一个新的 goroutine 并永远继续下去。


c1 := make(chan string)

c2 := make(chan string)


go DoStuff(c1, 5)

go DoStuff(c2, 2)


for ; true;  {

    select {

    case msg1 := <-c1:

        fmt.Println("received ", msg1)

        go DoStuff(c1, 1)

    case msg2 := <-c2:

        fmt.Println("received ", msg2)

        go DoStuff(c2, 9)

    }

}

我现在希望对 N 个 goroutine 具有相同的行为,但是在这种情况下 select 语句将如何显示?


这是我开始使用的代码位,但我很困惑如何编写 select 语句


numChans := 2


//I keep the channels in this slice, and want to "loop" over them in the select statemnt

var chans = [] chan string{}


for i:=0;i<numChans;i++{

    tmp := make(chan string);

    chans = append(chans, tmp);

    go DoStuff(tmp, i + 1)


//How shall the select statment be coded for this case?  

for ; true;  {

    select {

    case msg1 := <-c1:

        fmt.Println("received ", msg1)

        go DoStuff(c1, 1)

    case msg2 := <-c2:

        fmt.Println("received ", msg2)

        go DoStuff(c2, 9)

    }

}


蝴蝶刀刀
浏览 202回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go