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