我们可以使用通道来同步多个 goroutine 的执行。以下是一个使用阻塞接收等待 goroutine 完成的示例。当需要等待多个 goroutine 完成时,你可能更倾向于使用 WaitGroup。
package main
import (
"fmt"
"time"
)
// 这是我们将在 goroutine 中运行的函数。done 通道将用于通知另一个 goroutine,该函数的工作已完成。
func worker(done chan bool) {
fmt.Print("working...")
time.Sleep(time.Second)
fmt.Println("done")
// 发送一个值以通知我们已完成。
done <- true
}
func main() {
// 启动一个工作 goroutine,并为其提供用于通知的通道。
done := make(chan bool, 1)
go worker(done)
// 阻塞,直到我们从工作 goroutine 接收到通道上的通知。
<-done
}运行结果:
$ go run channel-synchronization.go
working...done 原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。