Go言語にはgoroutineというものがあり、複数のタスクを並行(Concurrent)に実行したい場合に役立ちます。 またGo言語では、ライブラリなどのAPIは基本的に同期版を提供し、非同期で処理したい場合は呼び出し側がgoroutineで非同期化するのが一般的です。 そこで、goroutineを使って関数を呼び出し、その結果を得るための実装方法について、自分なりに考えてみたので、ここにまとめておきます。 戻り値がない 戻り値がなく、処理が終わっていればよい場合: // boolでもよいが空struct done := make(chan struct{}, 0) go func() { // 何か処理をする close(done) }() // chanがcloseされるまでブロックする <-done 値の受け渡しがない場合はシンプルです。 Tips: 空structについて 値の受
![Go言語で非同期処理の結果を受け取る - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/16a4ff63a01b311225bbdeac9f26731be1e885fa/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Fadvent-calendar-ogp-background-7940cd1c8db80a7ec40711d90f43539e.jpg%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9R28lRTglQTglODAlRTglQUElOUUlRTMlODElQTclRTklOUQlOUUlRTUlOTAlOEMlRTYlOUMlOUYlRTUlODclQTYlRTclOTAlODYlRTMlODElQUUlRTclQjUlOTAlRTYlOUUlOUMlRTMlODIlOTIlRTUlOEYlOTclRTMlODElOTElRTUlOEYlOTYlRTMlODIlOEImdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzNBM0MzQyZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPWIzNTFlM2U5NDA4N2JiODBhMTJhYTU2ZDNkYzQyMzI1%26mark-x%3D120%26mark-y%3D96%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9OTcyJnR4dD0lNDBuYWplaXJhJnR4dC1jb2xvcj0lMjMzQTNDM0MmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1iM2RlNTYzZDU1ZWE5MWYyMGFjNTE3YjVmMWUwMDRhMQ%26blend-x%3D120%26blend-y%3D500%26blend-mode%3Dnormal%26s%3D690c48b6f8b105d174ca2b07702c1b83)