Go でのマップのディープ コピー
質問: Go には、任意のマップのディープ コピーを作成するための組み込み関数またはライブラリはありますか?
答え: Go はマップコピー用の専用の組み込み関数を提供していませんが、この目的には、encoding/gob パッケージを利用できます。
エンコードとデコードのアプローチ
Encoding/gob は、Encode と Decode の 2 つの機能を提供し、これらを利用して目的を達成できます。マップのディープコピー。 Encode 関数はマップをバッファーにエンコードし、Decode 関数はバッファーからマップを再構築します。
例:
package main import ( "bytes" "encoding/gob" "fmt" "log" ) func main() { ori := map[string]int{ "key": 3, "clef": 5, } var mod bytes.Buffer enc := gob.NewEncoder(&mod) dec := gob.NewDecoder(&mod) fmt.Println("ori:", ori) // key:3 clef:5 err := enc.Encode(ori) if err != nil { log.Fatal("encode error:", err) } var cpy map[string]int err = dec.Decode(&cpy) if err != nil { log.Fatal("decode error:", err) } fmt.Println("cpy:", cpy) // key:3 clef:5 cpy["key"] = 2 fmt.Println("cpy:", cpy) // key:2 clef:5 fmt.Println("ori:", ori) // key:3 clef:5 }
この例では、元のマップ ori をエンコードします。バッファMODに入れます。次に、バッファを新しいマップ cpy にデコードします。コピー マップと元のマップは独立しており、一方に加えられた変更はもう一方には影響しません。
エンコーディング/Gob の利点
エンコーディング/Gob オファーの使用マップのスライスを含む構造体のスライスなど、複雑なデータ構造を操作する場合に利点があります。これは、手動実装を必要とせずにディープ コピーを実行する簡単な方法を提供します。
追加リソース
エンコーディング/gob の詳細については、公式 Go ブログを参照してください。投稿:
[https://blog.golang.org/gobs](https://blog.golang.org/gobs)
以上がGo でマップをディープ コピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。