2017-08-24 27 views
0

在下面的例子中,我在匿名轉發例程中發送「ping」到'mq'字符串通道,並嘗試接收這四個字符串dequeue() goroutines,不知道爲什麼它不會不打印任何東西在golang通道中沒有收到

$ 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 
    $ 

回答

3

只要主常規返回,程序就會退出。所以你需要確保不是提早從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) 
     } 
}