迭代通道发送的所有值,直到它在 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)
}
}
我想了解 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)
}
}