ゴルーチンにおける戻り値の運命
Go では、ゴルーチンは同時に実行される軽量のスレッドです。ゴルーチンを使用するときによくある質問の 1 つです。ゴルーチン内で呼び出された関数の戻り値はどうなりますか?
戻り値の保存
一般的な考えに反して、戻り値はゴルーチンから呼び出された関数のがスタックに保存されます。これは、以下に示すように、アセンブリ出力から明らかです。
go build -gcflags -S z.go
"".getNumber+0(SB) MOVQ "".i+8(FP),BX MOVQ BX,"".~r1+16(FP)
ただし、このスタックはゴルーチンに固有であり、完了時に破棄されるため、メイン ルーチンは戻り値にアクセスできなくなります。
戻り値の取得
格納されているにもかかわらず、 goroutine スタックが分離されているため、戻り値を取得できません。この制限は、ゴルーチンとメイン ルーチンの間で情報を交換するチャネルなどの代替通信メカニズムを使用することの重要性を強調しています。
戻り値の回避
戻り値にアクセスできないことを考慮すると、値をゴルーチンで使用しないことをお勧めします。代わりに、データ交換用のチャネルを活用して、信頼性の高い通信と価値の共有を確保することを検討してください。
以上がGo ゴルーチンの関数の戻り値はどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。