Maison >développement back-end >Golang >Comment créer efficacement des copies complètes de cartes dans Go ?

Comment créer efficacement des copies complètes de cartes dans Go ?

DDD
DDDoriginal
2024-11-29 21:29:111005parcourir

How to Efficiently Create Deep Copies of Maps in Go?

Faire des copies de cartes dans Go : existe-t-il une fonction intégrée ?

Les cartes dans Go sont une structure de données polyvalente, mais le l'absence de fonction intégrée pour créer des copies peut être un obstacle. Heureusement, plusieurs approches peuvent vous aider à y parvenir.

Utilisation du package encoding/gob

Pour une solution générale, le package encoding/gob fournit un moyen robuste de créer des copies complètes de structures de données complexes, y compris des cartes. En codant la carte originale puis en la décodant dans une nouvelle variable, vous créez une copie qui fait référence à un emplacement mémoire différent.

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
}

En utilisant encoding/gob, vous pouvez créer des copies profondes qui respectent même les structures imbriquées. , comme des tranches de cartes ou des cartes contenant des tranches.

Autres considérations

Pendant que encoding/gob offre une solution générale, elle peut ne pas convenir à tous les cas. Si vos cartes sont relativement simples, vous pouvez envisager d'écrire une fonction personnalisée pour créer des copies superficielles. De plus, il existe des bibliothèques tierces qui offrent une fonctionnalité de copie de cartes.

N'oubliez pas que les copies dans Go sont toujours profondes, ce qui signifie qu'elles créent de nouvelles instances des données, contrairement aux copies superficielles, qui créent uniquement des références à l'original. Il s'agit d'une distinction importante à prendre en compte lors de la manipulation de cartes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn