如何用 go 的 sync 包实现函数回调?创建一个 waitgroup 实例并指定等待的 goroutine 数。为每个要等待的 goroutine 调用 waitgroup.add(1)。当 goroutine 完成时,调用 waitgroup.done() 将计数减 1。调用 waitgroup.wait() 方法,它将在所有 goroutine 完成之前阻塞。
如何在 Golang 中使用 sync 包实现函数回调
Go 的 sync 包提供了一个叫做 WaitGroup 的类型,它允许你等待一组 goroutine 完成他们的任务。这在需要在继续执行之前等待多个函数或子例程完成其任务时很有用。
要使用 WaitGroup,你需要创建一个实例并为其传递一个整数参数,该参数指定要等待的 goroutine 数量。然后,对于你要等待的每个 goroutine,你可以调用 WaitGroup.Add(1)。当 goroutine 完成时,你可以调用 WaitGroup.Done()。这会将等待的 goroutine 数减 1。
立即学习“go语言免费学习笔记(深入)”;
一旦所有 goroutine 都完成了,WaitGroup.Wait() 方法将阻塞,直到所有 goroutine 都完成。
示例
以下是一个使用 sync 包实现函数回调的示例:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
// 创建一个自定义函数类型
type CallbackFunc func()
// 定义一个带有回调函数参数的函数
getData := func(callback CallbackFunc) {
// 模拟从远程获取数据
data := "some data"
// 调用回调函数并传递数据
callback(data)
}
// 创建一个回调函数
callback := func(data string) {
fmt.Println("收到数据:", data)
// 告诉WaitGroup该goroutine已完成
wg.Done()
}
// 向WaitGroup添加一个goroutine
wg.Add(1)
// 启动一个goroutine来获取数据并执行回调
go getData(callback)
// 等待所有goroutine完成
wg.Wait()
}
在这个示例中,getData 函数接受一个 CallbackFunc 类型作为参数。该函数模拟从远程获取数据,然后调用回调函数并传递数据。
callback 函数负责打印接收到的数据并向 WaitGroup 发出信号表示它已完成。
main 函数创建了一个 WaitGroup 实例,向其添加一个 goroutine,然后等待所有 goroutine 完成。
执行此示例代码,它将打印:
收到数据:some data