Sobes.tech
Junior — Middle

Welche Daten im Slice werden beim Aufruf der Funktion mit diesem Slice als Argument übergeben?

sobes.tech KI

Antwort von AI

In Go ist ein Slice eine Struktur, die drei Felder enthält: einen Zeiger auf ein Array, eine Länge und eine Kapazität. Wenn ein Slice an eine Funktion übergeben wird, wird nur diese Struktur kopiert, nicht das gesamte Datenarray.

Das bedeutet, dass beim Aufruf einer Funktion das Slice per Wert übergeben wird, aber nur die Metadaten (Zeiger, Länge, Kapazität) kopiert werden, nicht die Elemente des Arrays selbst. Das bedeutet, dass innerhalb der Funktion das Slice auf dasselbe Basiselementarray zeigt, und Änderungen an den Elementen des Slices innerhalb der Funktion außerhalb sichtbar sind.

Beispiel:

func modify(slice []int) {
    slice[0] = 100 // Ändert das erste Element
}

func main() {
    s := []int{1, 2, 3}
    modify(s)
    fmt.Println(s) // gibt [100 2 3] aus
}

Daher werden beim Übergeben eines Slices an eine Funktion nur die drei Felder der Slice-Struktur kopiert, während die Array-Daten gemeinsam bleiben.