Go でマップのコピーを作成する: 組み込み関数はありますか?
Go のマップは多用途のデータ構造ですが、コピーを作成するための組み込み機能がないことが障害になる可能性があります。幸いなことに、これを達成するには、いくつかのアプローチが役立ちます。
encoding/gob パッケージの使用
一般的な解決策として、encoding/gob パッケージは、マップを含む複雑なデータ構造のディープコピー。元のマップをエンコードし、それを新しい変数にデコードすることで、別のメモリの場所を参照するコピーを作成できます。
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 }
エンコーディング/gob を使用すると、ネストされた構造も尊重する深いコピーを作成できます。 、マップのスライスまたはスライスを含むマップなど。
その他の考慮事項
coding/gob は一般的な解決策を提供しますが、すべてのケースに適しているわけではありません。マップが比較的単純な場合は、浅いコピーを作成するためのカスタム関数を作成することを検討できます。さらに、マップのコピー機能を提供するサードパーティのライブラリもあります。
Go のコピーは常に深いものであることに注意してください。つまり、元のコピーへの参照のみを作成する浅いコピーとは異なり、データの新しいインスタンスが作成されます。これは、マップを操作するときに考慮すべき重要な区別です。
以上がGo でマップのディープ コピーを効率的に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。