Ce face maps.Clone
Un map în Go este o referință: b := a nu copiază datele, ci face ca ambele variabile să vadă același map. maps.Clone(m) creează un map nou, cu aceleași perechi, pe care îl poți modifica fără să atingi originalul. Clone(nil) returnează nil.
maps.Copy(dst, src) pune toate perechile din src în dst. Dacă o cheie există deja în dst, valoarea ei este înlocuită. Este util pentru a aplica setări noi peste setări implicite.
Ambele copii sunt superficiale: dacă valorile sunt slice-uri, pointeri sau alte map-uri, originalul și copia vor împărți acele date.
Parametri
| Parametru | Descriere |
|---|---|
m |
Pentru Clone: map-ul copiat. |
dst, src |
Pentru Copy: destinația (trebuie să nu fie nil) și sursa. |
Ce returnează
Clone: map-ul nou. Copy: nimic.
Exemple
Exemplul 1: Atribuire față de clonare
package main
import (
"fmt"
"maps"
)
func main() {
note := map[string]int{"Ana": 9, "Mihai": 7}
acelasi := note
copie := maps.Clone(note)
acelasi["Ana"] = 10
copie["Mihai"] = 5
fmt.Println(note)
fmt.Println(copie)
}
Rezultat
map[Ana:10 Mihai:7]
map[Ana:9 Mihai:5]
Exemplul 2: Setări implicite peste care se aplică setările utilizatorului
package main
import (
"fmt"
"maps"
)
func main() {
implicit := map[string]string{"limba": "ro", "tema": "luminoasă", "oras": "București"}
utilizator := map[string]string{"tema": "întunecată", "oras": "Iași"}
setari := maps.Clone(implicit)
maps.Copy(setari, utilizator)
fmt.Println(setari)
fmt.Println(implicit)
}
Rezultat
map[limba:ro oras:Iași tema:întunecată]
map[limba:ro oras:București tema:luminoasă]
Greșeli frecvente
- Crezi că
b := acopiază un map: orice modificare prinbse vede îna. - Inversezi argumentele lui
Copy: ordinea esteCopy(destinație, sursă), ca la funcția predefinităcopy.
Comenzi înrudite
slices.Clone: Returnează o copie a unui slice, cu memorie proprie: modificările copiei nu afectează originalul.maps.Collect: Collect construiește un map nou din perechile unui iterator; Insert adaugă perechile într-un map existent.maps.Equal: Verifică dacă două map-uri au exact aceleași chei cu aceleași valori; EqualFunc compară valorile cu o funcție proprie.