Tiefes Kopieren in Go
Wenn Sie versuchen, ein Duplikat eines Objekts zu erstellen, kopiert die tiefe Kopie alle Felder der Originalobjekte genau. Darüber hinaus wird, wenn es irgendwelche Objekte als Felder hat, auch eine Kopie davon erstellt.
Wenn Sie also eine tiefe Kopie eines Objekts durchführen, das eine Referenz (Objekt) enthält, verweisen sowohl das ursprüngliche als auch das duplizierte Objekt auf separate Objekte, und alle Änderungen, die an den Daten im kopierten Objekt vorgenommen werden, werden nicht im ursprünglichen Objekt widergespiegelt.
Schauen wir uns ein paar Fälle an, um besser zu verstehen, wie man eine tiefe Kopie in Go durchführt.
Führen Sie Deep Copy mit struct
in Go durch
Wir können ein solches tiefes Kopieren manuell durchführen. Verwenden Sie im Fall eines Slice den folgenden Code, um eine tiefe Kopie zu erstellen.
Sie werden sehen, dass das Slice ein völlig separates Objekt ist, nicht nur ein Verweis auf dasselbe Slice.
Beispiel:
package main
import (
"fmt"
)
type Cat struct {
age int
name string
friends []string
}
func main() {
harry := Cat{1, "Harry", []string{"Ron", "Jenny", "Kety"}}
jay := harry
jay.friends = make([]string, len(harry.friends))
copy(jay.friends, harry.friends)
jay.friends = append(jay.friends, "Sid")
fmt.Println(harry)
fmt.Println(jay)
}
Ausgang
{1 Harry [Ron Jenny Kety]}
{1 Harry [Ron Jenny Kety Sid]}