首页 > 代码库 > Wait for a goroutine
Wait for a goroutine
在 Effective Go 中,介绍了一种 goroutine 与 channel 搭配使用的方法。
package main import ( "fmt" "time" ) func main() { c := make(chan string) go func() { time.Sleep(1000) fmt.Println("Go first!") c <- "done" }() fmt.Println("Go after.") fmt.Println("No waiting.") <-c fmt.Println("Wait for the first one.") }
在这个示例中,使用 go func() {}() 相当于让一段代码在背景执行,我们不用等待它结束就可以继续执行下面的程序,因此,该程序的运行结果是最先打印 "Go after."
如果不使用 channel 那么将会在最后才打印 "Go first!"
这里使用了 channel, 当遇到 <-c 时,程序就会被阻塞,需要等待消息发过来才能继续执行。
即,在打印完 "No waiting." 之后,等待消息,打印 "Go first!", 发送消息("done"),收到消息,打印 "Wait for the first one."
也就是说,可以通过使用 channel 来监视 goroutine 有没有结束。
Wait for a goroutine
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。