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

Iterate over all the values a channel sends until it is closed in 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)
    }
}

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

非常感谢您的帮助

您可以使用 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)
    }
}