我正在学习Go,并且想尝试goroutine和频道。
这是我的代码:
package main import "fmt" func main(){ messages := make(chan string,3) messages <- "one" messages <- "two" messages <- "three" go func(m *chan string) { fmt.Println("Entering the goroutine...") for { fmt.Println(<- *m) } }(&messages) fmt.Println("Done!") }
结果如下:
Done!
我不明白为什么我的goroutine永远不会执行。没有输入“进入goroutine”,并且没有任何错误消息。
事实是您的goroutine开始执行,但是在执行任何操作之前就结束了,因为您的程序在打印后立即停止Done!:goroutine的执行与主程序无关,但是将在与程序相同的位置处停止。因此,基本上,您需要一些使程序等待它们的过程。它可能是另一个等待大量消息sync.WaitGroup,或其他技巧的通道。
sync.WaitGroup
您应该在golang博客中阅读有关并发性的出色文章。