为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
跃然一笑 2021-09-10 20:59:37
我试图了解 goroutine 和通道是如何工作的。我有一个循环向通道发送值,我想遍历通道发送的所有值,直到它关闭。我在这里写了一个简单的例子:package mainimport (    "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)    }}这给出了预期的结果,但我想知道是否有更短的方法来做到这一点。非常感谢您的帮助
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

您可以range在频道上使用。循环将继续,直到通道根据需要关闭:


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)

    }

}


查看完整回答
反对 回复 2021-09-10
  • 1 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信