Go における匿名構造体と空の構造体
Go では、匿名構造体と空の構造体には区別があり、混乱を招く可能性があります。チャネルを操作するとき。
匿名Struct
コード内の行 Done <- struct{}{} は匿名構造体を使用しています。匿名構造体は、名前付き型宣言を行わずに、ステートメント内で宣言的に定義されます。この場合、構造体にはフィールドがなく、事実上空です。
チャネルで匿名構造体を使用する理由
チャネルで値を送信または受信するには、以下が必要ですタイプセーフなインターフェイス。匿名構造体を使用すると、予期されるタイプ chan struct{} のチャネルを作成できます。これにより、データを転送せずに情報を通知できます。
done <- struct{}{} に追加の中括弧が必要な理由は、コンパイラが struct{} 型の値として評価される式を予期しているためです。裸の struct{} を送信すると、構文エラーが発生します。
Empty Struct
一方、make(chan struct{}) などの宣言により、名前付き 構造体タイプ、struct{}、サイズはゼロです。これは通常、送信または受信される実際の値が無関係な場合のシグナリング目的で使用されます。
for _ = range langs { <-done }
This の必要性この行は、メインのゴルーチンが途中で終了しないようにするために不可欠です。すべてのウォリアー ゴルーチンが完了するまでブロックされます。この行がないと、すべてのウォリアーがシグナルを受信する前にメインのゴルーチンが終了し、不正確な結果が生じます。
空の構造体の利点
以上がGo チャネルの匿名構造体と空の構造体: いつどちらを使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。