go 例程运行时如何从通道读取

我正在寻找启动未知数量的 goroutines。在此示例中添加到number频道。然后在messages频道滚动时从频道中读取消息。

当我希望在此代码中看到所有 100 条消息时,为什么我只看到一条消息?如何查看添加的所有号码的消息?

package main


import (

    "fmt"

)


func Run(numbers chan int, messages chan string) {

    stuff := <-numbers

    messages <- fmt.Sprintf("Ran %d", stuff)

}


func main() {

    var numbers = make(chan int)

    var messages = make(chan string)


    go Run(numbers, messages)


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

        go func(i int) { numbers <-i }(i) 

    }


    msg := <-messages

    fmt.Println(msg)

}


喵喔喔
浏览 112回答 1
1回答

哈士奇WWW

因为Run从 读取一条消息numbers,向 写入一条消息messages,然后终止。试试这个:func Run(numbers chan int, messages chan string) {&nbsp; &nbsp; for stuff := range numbers {&nbsp; &nbsp; &nbsp; &nbsp;messages <- fmt.Sprintf("Ran %d", stuff)&nbsp; &nbsp; }}这将一直运行到numbers关闭。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go