Go でスライスをディープ コピーする方法: 追加かコピーか?
Go でスライスを簡潔かつ効率的にディープ コピーする方法
Go では、スライスをコピーするには、元の配列への意図しない変更を防ぐために新しいバッキング配列を作成することを考慮する必要があります。 。これを実現するには、簡潔でパフォーマンスの高い方法がいくつかあります。
1 つの方法は、append 関数を使用することです。
copy := append([]T{}, orig...)
ここで、T は元のスライス原点の要素タイプです。ただし、組み込みのコピー関数を使用した代替ソリューションが存在します。
cpy := make([]T, len(orig)) copy(cpy, orig)
コピー関数は、言語内でスライスをコピーするために最適化されています。 Go ドキュメントより:
「コピー組み込み関数は、ソース スライスから宛先スライスに要素をコピーします。 ... Copy はコピーされた要素の数を返します。これは len(src) の最小値になります。および len(dst)。"
注:
これらのソリューションでは値がコピーされることを覚えておくことが重要です。 スライス。スライスにポインタまたはポインタ フィールドを持つ構造体が含まれている場合、それらのポインタは元のスライスと同じ値を指します。
ベンチマーク:
追加とコピーのテストこれらのアプローチは同様のパフォーマンス特性を明らかにします:
BenchmarkCopy 100000 24724 ns/op BenchmarkAppend 100000 24967 ns/op
ベンチマークの結果は、どちらの方法もディープ コピーの効率が同等であることを示唆しています。スライス。
以上がGo でスライスをディープ コピーする方法: 追加かコピーか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?
