golang频道收不到
Not receiving in the golang channel
在下面的示例中,我将 "ping"s 发送到匿名 go 例程中的 'mq' 字符串通道,并尝试在四个 dequeue()[=14= 中接收这些字符串] goroutines ,不知道为什么它不打印任何东西
$ cat channels2.go
...
var mq chan string
func main() {
mq = make(chan string)
for i := 0; i < 4; i++ {
go dequeue()
}
go func() {
for i := 0; ; i++ {
mq <- "ping"
}
}()
}
func dequeue() {
for m := range mq {
fmt.Println(m)
}
}
$ go run channels2.go
$
一旦主协程returns,程序就退出了。所以你需要确保 不是 return 从 main
提早。一种方法是在主 goroutine 中对通道执行写循环:
var mq chan string
func main() {
mq = make(chan string)
for i := 0; i < 4; i++ {
go dequeue()
}
for {
mq <- "ping"
}
}
func dequeue() {
for m := range mq {
fmt.Println(m)
}
}
在下面的示例中,我将 "ping"s 发送到匿名 go 例程中的 'mq' 字符串通道,并尝试在四个 dequeue()[=14= 中接收这些字符串] goroutines ,不知道为什么它不打印任何东西
$ cat channels2.go
...
var mq chan string
func main() {
mq = make(chan string)
for i := 0; i < 4; i++ {
go dequeue()
}
go func() {
for i := 0; ; i++ {
mq <- "ping"
}
}()
}
func dequeue() {
for m := range mq {
fmt.Println(m)
}
}
$ go run channels2.go
$
一旦主协程returns,程序就退出了。所以你需要确保 不是 return 从 main
提早。一种方法是在主 goroutine 中对通道执行写循环:
var mq chan string
func main() {
mq = make(chan string)
for i := 0; i < 4; i++ {
go dequeue()
}
for {
mq <- "ping"
}
}
func dequeue() {
for m := range mq {
fmt.Println(m)
}
}