1. ホーム
  2. go

[解決済み] ゴルーチンからの戻り値をキャッチする

2022-11-14 18:57:53

質問

以下のコードは、コンパイル時に「unnexpected go」というエラーが発生します。

x := go doSomething(arg)

func doSomething(arg int) int{
    ...
    return my_int_value
}

goroutineを使わずに普通に関数を呼び出したり、チャンネルを使ったりすれば、返り値を取得できることは知っています。

私の質問は、なぜgoroutineからこのように戻り値を取得することができないのか、ということです。

どのように解決するのですか?

厳密な回答としては ができます。 ということです。ただ、おそらく良いアイデアではないでしょう。以下はそれを行うコードです。

var x int
go func() {
    x = doSomething()
}()

これは新しいゴルーチンを生成し、そのゴルーチンが doSomething() を計算し、その結果を x . 問題は、どのようにして x をどのように使うのか?おそらく、レースコンディションを発生させないために、スポーンされたゴルーチンを確実に終了させたいと思うことでしょう。しかし、そうしたいのであれば、ゴルーチンと通信する方法が必要です。もし、その方法があるのであれば、値を送り返すためにそれを使えばいいのではないでしょうか?