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

时间:2015-01-13 22:34:52

标签: go

我想了解goroutines和渠道是如何运作的。我有一个循环向通道发送值,我想迭代通道发送的所有值,直到它关闭。

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

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

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

非常感谢你的帮助

1 个答案:

答案 0 :(得分:19)

您可以在频道上使用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)
    }
}