Heim >Backend-Entwicklung >Golang >Wie kann man eine Go-Map tief kopieren, ohne das Original zu beeinträchtigen?
Tiefenkopieren einer Karte ohne Beschädigung des Originals
In Go wird versucht, eine Karte zu kopieren, indem eine Referenz wie aSuperMap[y] = zugewiesen wird aMap kann zu unbeabsichtigten Folgen führen. Um eine assoziative Karte zu erstellen, ohne das Original zu beeinträchtigen, ist ein tiefes Kopieren erforderlich.
Das Problem
Das bereitgestellte Beispiel versucht, den Inhalt einer Karte in eine SuperMap zu kopieren und dann zu löschen aMap. Durch das Löschen eines Eintrags aus aMap (delete(aMap, x)) wird jedoch auch seine Referenz aus aSuperMap entfernt. Dies führt dazu, dass die Supermap doppelte Daten enthält oder inkonsistent wird.
Lösung: Deep Copying
Um zu vermeiden, dass die Originalkarte beim Vornehmen von Änderungen an der Kopie verändert wird, ist Deep Copying sinnvoll gebraucht. In einer for-Schleife:
for k, v := range originalMap { newMap[k] = v }
Jedes Schlüssel-Wert-Paar von originalMap wird einzeln in newMap kopiert. Durch diesen Vorgang wird eine neue und unabhängige Karte erstellt, die nicht mit dem Original verknüpft ist. Die ursprüngliche Karte kann dann gelöscht werden, ohne dass sich dies auf die Kopie auswirkt.
Beispiel
Das folgende Beispiel zeigt das tiefe Kopieren einer Karte:
originalMap := map[string]int{"one": 1, "two": 2} // Deep copy originalMap into newMap newMap := make(map[string]int) for k, v := range originalMap { newMap[k] = v } // Clear the original map originalMap = make(map[string]int) // Verify that newMap is independent of originalMap newMap["three"] = 3 fmt.Println(newMap) // {one: 1, two: 2, three: 3} fmt.Println(originalMap) // {}
In In diesem Beispiel ermöglicht Deep Copying die Änderung und Erweiterung von newMap unabhängig von originalMap, wodurch sichergestellt wird, dass die Integrität beider Maps gewahrt bleibt.
Das obige ist der detaillierte Inhalt vonWie kann man eine Go-Map tief kopieren, ohne das Original zu beeinträchtigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!