Go では、効率的なオブジェクトのディープ コピーが非常に重要です。データの操作と転送。一般的な 2 つの方法は、encoding/gob と encoding/json です。一般通念では、gob が json よりも優れたパフォーマンスを発揮するはずですが、一部のユーザーは予期せぬ結果に遭遇しました。この記事では、この異常を調査し、代替のディープ コピー アプローチを検討します。
gob のパフォーマンスの利点は、データ型ごとにカスタム コーデックをコンパイルすることに起因します。ただし、このプロセスでは、データとともに型定義を送信する必要があるため、特定の型の最初の値を処理するときにコストが発生します。
配列型の乗算を使用したテストでは、この影響が実証されています。オリジナルのバージョンでは、型送信のオーバーヘッドがないため、json は gob よりも優れたパフォーマンスを発揮しました。ただし、配列が大きくなった修正バージョンでは、型情報の送信コストがより多くの値で償却されるため、gob の速度が向上しました。
の場合と同様にマイクロ秒の実行時間を比較することでパフォーマンスを測定します。提供されたテスト コードでは不正確な結果が得られる可能性があります。 Go には、より信頼性が高く正確な測定を提供する組み込みのテストおよびベンチマーク ツールが用意されています。
gob と json は両方ともクローン作成にリフレクションを利用しますが、これには制限があります。
ディープ コピーの最も効率的で信頼性の高い方法には、カスタムの作成が含まれます。タイプのパッケージ内のロジックをコピーします。これにより、フィールドの正確な複製が保証され、ポインターの等価性が維持され、自己参照構造に対応できます。それほど便利ではありませんが、一般的なリフレクションベースのアプローチよりも優れたパフォーマンスを発揮し、メモリ使用量を最小限に抑えます。
以上がGo ディープ コピー: 「gob」が「json」よりも優れているのはいつですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。