提供されたコード スニペットでは、make() 関数を使用してチャネル c が作成され、sum 関数に渡されます。 。 Go では、明示的なポインタが作成されていない場合でも、チャンネルは参照によって暗黙的に渡されるのでしょうか?
その答えは、make() のユニークな動作にあります。技術的には、make() がヒープ上にメモリを割り当て、バックグラウンドでポインタを作成するときに、チャネルがコピーされます。ただし、このポインタ型は公開されておらず、参照型に似ています。
Go の仕様によれば、
「組み込み関数 make は型 T を取り、これはスライスである必要があります。マップまたはチャネル タイプ。オプションでその後に式のタイプ固有のリストが続きます。タイプ T (*T ではない) の値を返します。"
make() を使用すると、チャネルが初期化され、次のことが可能になります。参照タイプとして採用されます。したがって、基になるデータを複製せずに渡すことができます。
要約すると、チャネルは、make を使用して作成された場合、Go では参照によって効果的に渡されます。これは、スライス、マップ、ポインタ、関数などの他のデータ構造にも当てはまります。一方、プリミティブ データ型 (数値、ブール値) と可変構造体は、関数に渡されるときにコピーされます。
以上がGoではチャネルは参照によって渡されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。