Sobes.tech
Junior — Middle

Wie wird ein Slice in einer Programmiersprache an eine Funktion übergeben?

sobes.tech KI

Antwort von AI

In Go wird ein Slice an eine Funktion per Wert übergeben, aber der Slice enthält einen Zeiger auf ein Array sowie seine Länge und Kapazität. Das bedeutet, dass beim Übergeben eines Slices an eine Funktion die Struktur des Slices kopiert wird, nicht aber die Daten des Arrays, auf das es zeigt.

Daher wirken sich Änderungen an den Elementen des Slices innerhalb der Funktion auf das ursprüngliche Array aus, aber Änderungen am Slice selbst (z.B. Zuweisung eines neuen Slices) beeinflussen das externe Slice nicht.

Beispiel:

package main
import "fmt"

func modifySlice(s []int) {
    s[0] = 100       // ändert das Element des ursprünglichen Arrays
    s = append(s, 200) // ändert das lokale Slice, das externe bleibt unverändert
}

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

Auf diese Weise wird das Slice per Wert übergeben, aber durch den internen Zeiger sind Änderungen an den Elementen außerhalb der Funktion sichtbar.