Heim > Backend-Entwicklung > Golang > Wie kann ich ein Slice ändern, das als Argument in einer Go-Funktion übergeben wird?

Wie kann ich ein Slice ändern, das als Argument in einer Go-Funktion übergeben wird?

Barbara Streisand
Freigeben: 2024-12-23 07:30:43
Original
982 Leute haben es durchsucht

How Can I Modify a Slice Passed as an Argument in a Go Function?

Slices als Argumente mit Original-Slice-Änderungen übergeben

Die Übergabe von Variablen nach Wert in Go begrenzt die Auswirkungen von Funktionsänderungen auf den Funktionsumfang. In Fällen, in denen ein Slice außerhalb der Funktion geändert werden muss, reicht die direkte Übergabe eines Slice als Argument nicht aus.

Das Verhalten der Slice-Append-Funktion

Die Append-Funktion weist zu ein neues Slice und kopiert die Elemente aus dem vorhandenen Slice, einschließlich aller innerhalb der Funktion vorgenommenen Anhänge. Der ursprüngliche Slice bleibt jedoch unberührt.

Beispiel: Rekursion auf einem akkumulierenden Slice

Das bereitgestellte Code-Snippet versucht zunächst, Validierungsnachrichten in einem Slice zu akkumulieren, das als Argument übergeben wird zu einer rekursiven Funktion. Die Änderungen der Funktion werden jedoch nicht im ursprünglichen Slice widergespiegelt.

Lösungen

Es gibt zwei Hauptlösungen für dieses Problem:

  1. Übergeben Sie einen Zeiger auf das Slice: Durch die Übergabe eines Zeigers auf das ursprüngliche Slice wirken sich alle innerhalb der Funktion vorgenommenen Änderungen direkt auf das Slice aus Original.
func myAppend(list *[]string, value string) {
    *list = append(*list, value)
}
Nach dem Login kopieren
  1. Das geänderte Segment von der Funktion zurückgeben: Anstatt einen Akkumulator zu übergeben, kann die rekursive Funktion das geänderte Segment zurückgeben, wodurch die Notwendigkeit entfällt Übergeben Sie eine Akkumulatorvariable.
func validate(obj Validatable, messages []ValidationMessage) []ValidationMessage {
    //...Processing

    return messages
}
Nach dem Login kopieren

Idiomatisches Go Ansatz

Die Übergabe von Zeigern an Slices ist ein idiomatischer Go-Ansatz, wenn die Funktion das ursprüngliche Slice ändern muss. Wie im Ansatz der Rückgabe von Slice gezeigt, ist es auch möglich, die Notwendigkeit von Akkumulatoren zu umgehen, indem man die geänderte Slice zurückgibt.

Leistungsüberlegungen

Die Auswirkungen der Übergabe von a auf die Leistung Zeiger im Vergleich zur Rückgabe eines Slice ist in den meisten Szenarien vernachlässigbar. Das genaue Verhalten kann jedoch je nach Compileroptimierungen und spezifischer Codeverwendung variieren.

Das obige ist der detaillierte Inhalt vonWie kann ich ein Slice ändern, das als Argument in einer Go-Funktion übergeben wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage