ホームページ >バックエンド開発 >Golang >Go スライスのディープコピーを効率的に作成するにはどうすればよいですか?

Go スライスのディープコピーを効率的に作成するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-28 10:36:17530ブラウズ

How to Efficiently Create a Deep Copy of a Go Slice?

Go でスライスのディープ コピーを作成する

Go でスライスを操作する場合、ディープ コピーを作成して、 1 つのコピーに加えた変更が元のコピーに影響を与えないように注意してください。効率的なアプローチの 1 つは、組み込みのコピー関数を活用することです。

「コピー」関数の使用

コピー関数は、引数として 2 つのスライス、宛先スライス dst を受け取ります。そしてソーススライスsrc。 2 つのスライスが重なっている場合でも、要素を src から dst にコピーします。この関数は、コピーに成功した要素の数を返します。

例:

cpy := make([]T, len(orig))
n := copy(cpy, orig)

この例では、元のスライスと同じ長さの新しいスライス cpy が作成されます。スライスオリジナル。次に、copy 関数を使用して要素を orig から cpy にコピーします。n はコピーされた要素の数を表します。

パフォーマンスのベンチマーク

コピーのパフォーマンスを比較するには一般的に使用されるappendメソッドを使用して関数のベンチマークを実施しました。結果は、両方のメソッドが同等のパフォーマンスを持っていることを示しました:

BenchmarkCopy: 24724 ns/op
BenchmarkAppend: 24967 ns/op

考慮事項

コピー関数はスライス値の深いコピーを作成する一方で、ポインターやポインター フィールドを含む構造体のコピーは処理しません。これらのフィールドは、元のスライスと同じ値を指し続けます。

以上がGo スライスのディープコピーを効率的に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。