Heim  >  Artikel  >  Backend-Entwicklung  >  Wie funktionieren Änderungen an Arrays, die an Funktionen übergeben werden, in Go?

Wie funktionieren Änderungen an Arrays, die an Funktionen übergeben werden, in Go?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-31 04:57:01137Durchsuche

How do modifications to arrays passed to functions work in Go?

An Funktionen in Go übergebene Arrays ändern

Im Gegensatz zu einigen Programmiersprachen übergibt Go Arrays nicht implizit als Referenz. Wenn ein Array an eine Funktion übergeben wird, wird nur sein Wert kopiert. Daher wirken sich Änderungen, die am übergebenen Array innerhalb der Funktion vorgenommen werden, nicht auf das ursprüngliche Array aus.

In Go werden Arrays jedoch nicht explizit deklariert. Stattdessen arbeiten wir mit Slices, das sind dynamische, in der Größe veränderbare Ansichten der zugrunde liegenden Arrays. Wenn ein Slice an eine Funktion übergeben wird, wird nur der Slice-Deskriptor kopiert, der einen Zeiger auf das zugrunde liegende Array, seine Länge und seine Kapazität enthält.

Dadurch werden alle an den Elementen des Slice innerhalb der Funktion wird im ursprünglichen Slice widergespiegelt, da sie alle auf dasselbe zugrunde liegende Array verweisen.

Betrachten Sie das folgende Codebeispiel:

<code class="go">func main() {
    tab := []int{1, 2, 3}
    fmt.Println(tab) // [1 2 3]
    reverse(tab)
    fmt.Println(tab) // [3 2 1]
}

func reverse(tab []int) {
    for i, j := 0, len(tab)-1; i < j; i, j = i+1, j-1 {
        tab[i], tab[j] = tab[j], tab[i]
    }
}</code>

In diesem Beispiel die Umkehrfunktion erhält einen Slice-Tab. Änderungen, die an der Registerkarte „Slice“ innerhalb der Funktion vorgenommen werden, wie z. B. das Vertauschen von Elementen, wirken sich auf das ursprüngliche Slice aus, da beide auf dasselbe zugrunde liegende Array verweisen.

Denken Sie daher daran, wenn Sie ein Array an eine Funktion in Go übergeben nur der Slice-Deskriptor wird kopiert. Alle innerhalb der Funktion an den Elementen des Slice vorgenommenen Änderungen werden im Original-Slice widergespiegelt, da dieser auf das zugrunde liegende Array verweist.

Das obige ist der detaillierte Inhalt vonWie funktionieren Änderungen an Arrays, die an Funktionen übergeben werden, in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn