迭代通道发送的所有值,直到它在 Go 中关闭

我试图了解 goroutine 和通道是如何工作的。我有一个循环向通道发送值,我想遍历通道发送的所有值,直到它关闭。


我在这里写了一个简单的例子:


package main


import (

    "fmt"

)


func pinger(c chan string) {

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

        c <- "ping"

    }

    close(c)

}


func main() {

    var c chan string = make(chan string)


    go pinger(c)


    opened := true

    var msg string


    for opened {

        msg, opened = <-c

        fmt.Println(msg)

    }

}

这给出了预期的结果,但我想知道是否有更短的方法来做到这一点。


非常感谢您的帮助


跃然一笑
浏览 155回答 1
1回答

潇湘沐

您可以range在频道上使用。循环将继续,直到通道根据需要关闭:package mainimport (&nbsp; &nbsp; "fmt")func pinger(c chan string) {&nbsp; &nbsp; for i := 0; i < 3; i++ {&nbsp; &nbsp; &nbsp; &nbsp; c <- "ping"&nbsp; &nbsp; }&nbsp; &nbsp; close(c)}func main() {&nbsp; &nbsp; var c chan string = make(chan string)&nbsp; &nbsp; go pinger(c)&nbsp; &nbsp; for msg := range c {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(msg)&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go