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

Spe*_*her 7 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

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

非常感谢您的帮助

Arj*_*jan 20

您可以使用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)
    }
}
Run Code Online (Sandbox Code Playgroud)