go - 迭代 channel 发送的所有值,直到它在 Go 中关闭

标签 go

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

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

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)
    }
}

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

非常感谢您的帮助

最佳答案

您可以在 channel 上使用range。循环将继续,直到 channel 按照您的意愿关闭:

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)

    for msg := range c {
        fmt.Println(msg)
    }
}

关于go - 迭代 channel 发送的所有值,直到它在 Go 中关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27932752/

相关文章:

go - kafka sarama库如何知道一个消费者组中有多少消费者

google-app-engine - 如何解决应用程序引擎/aetest 上下文因信息/警告调用而崩溃

go - Go中的5个 secret 关键字是什么?

c# - 使用 Go 编码 UTF-8

regex - 路由 http 请求时奇怪的 Go 正则表达式不匹配

types - go中某个值的动态类型是什么意思?

go - Gorm正在添加不需要的where子句

git - 您如何使用 bitbucket 服务器支持 'go get'?

在 GoLang 中用于后缀检测的正则表达式

go - 使用旧表中的架构和数据创建表