Golangで非同期コールバックデータをどのように実装しますか?
Go言語では、goroutineとchannelを利用することで、非同期的なコールバックデータの実装が可能。
非同期処理を実行し、その結果をチャンネルに送る関数を作成する。
func doAsyncTask(callback chan<- string) {
// 执行异步操作
result := "异步操作完成"
// 将结果发送到通道中
callback <- result
}
そして、その関数を呼び出す際に結果を受け取るためのチャンネルを作成し、コルーチンを使って非同期処理を行なう、例えば:
func main() {
callback := make(chan string)
go doAsyncTask(callback)
// 等待结果
result := <-callback
fmt.Println(result)
}
上記の例では、doAsyncTask関数を呼び出してチャネルを引数として渡すことで非同期操作を実行しています。その後、main関数では<-callbackを使用してチャネルから結果を受け取ります。チャネルの受信操作はブロッキングであるため、結果が受け取られるまではプログラムはここでブロックされます。非同期操作が終了し、結果がチャネルに送信されると、プログラムは実行を継続し、結果を出力します。
これにより、コルーチンとチャネルを使用して非同期コールバックデータを扱う機能が実現しました。