Tiefes Kopieren in Go

Jay Singh 20 Juni 2023
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]}