ホームページ >バックエンド開発 >Golang >Go でマップをディープ コピーするにはどうすればよいですか?

Go でマップをディープ コピーするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-26 16:15:11930ブラウズ

How Can I Deep Copy Maps in Go?

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 サイトの他の関連記事を参照してください。

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