阅读量:4
在Go中,协程的退出通常通过chan
实现。下面是一种常见的模式来实现阻塞的协程退出:
package main import ( "fmt" "time" ) func worker(done chan bool) { fmt.Println("协程开始执行...") // 模拟耗时操作 time.Sleep(2 * time.Second) fmt.Println("协程执行完毕!") done <- true } func main() { done := make(chan bool) go worker(done) // 阻塞等待协程完成 <-done fmt.Println("主函数退出") }
在上面的例子中,worker
函数是一个阻塞的协程,它执行一些耗时的操作。在worker
函数执行完毕后,通过将true
发送到done
通道来通知主函数协程的完成。主函数使用<-done
语法从通道中接收数据,从而阻塞等待协程的完成。一旦接收到数据,主函数就会继续执行,打印"主函数退出"。
这种使用chan
来实现协程退出的模式非常常见,因为它提供了一种简单而可靠的方式来同步协程的执行。