質問:
Golang は、Bjarne Stroustrup による C 11 で定義された移動セマンティクスをサポートしていますか? 、不要なものを避けるためにコピー?
答え:
C とは異なり、Go は、「移動コンストラクター」や「移動代入」などの特定のキーワードによる移動セマンティクスを明示的にサポートしません。ただし、特定の組み込み型に対して参照セマンティクスの概念を活用し、同様の最適化の利点を実現します。
Go の参照セマンティクス:
Go 内のすべてが渡されます。ポインタを含む値による。ただし、「参照型」として知られる一部の組み込み型は、外部データ構造への参照を保持します。
参照型の値がコピーされる場合、データ構造自体ではなく、基になるデータ構造への参照がコピーされます。これにより、メモリ使用量が最適化され、コピーのオーバーヘッドが削減されます。
スライスの例:
配列とスライスについて考えてみましょう:
type Array [5]int type Slice []int
配列は次のとおりです。スライスは参照型であるのに対し、値型です。配列を別の配列に割り当てる場合:
arr1 := Array{1, 2, 3, 4, 5} arr2 := arr1
arr2 は arr1 の独立したコピーです。ただし、スライスを別のスライスに割り当てる場合:
slice1 := Slice{1, 2, 3, 4, 5} slice2 := slice1
slice2 は基礎となるデータ構造をスライス 1 と共有します。
利点:
リファレンスGo のセマンティクスは以下を提供します:
以上がGolang は参照セマンティクスを通じて移動セマンティクスのような最適化を実現しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。