Heim > Backend-Entwicklung > Golang > Wie kann ich ein Slice in einer Go-Funktion ändern, ohne das Original zu beeinträchtigen?

Wie kann ich ein Slice in einer Go-Funktion ändern, ohne das Original zu beeinträchtigen?

Susan Sarandon
Freigeben: 2024-12-21 00:15:17
Original
474 Leute haben es durchsucht

How Can I Modify a Slice in a Go Function Without Affecting the Original?

Ändern eines an eine Funktion übergebenen Slice

In Go werden Parameter als Wert übergeben, was bedeutet, dass Änderungen an einem Slice innerhalb eines Die Funktion hat keinen Einfluss auf das Original-Slice. Dies kann ein Problem darstellen, wenn Sie rekursive Funktionen verwenden, bei denen Sie das Akkumulator-Slice ändern möchten.

Übergabe eines Zeigers an das Slice

Um das ursprüngliche Slice zu ändern, müssen Sie kann einen Zeiger auf das Slice als Funktionsparameter übergeben. Dadurch kann die Funktion das ursprüngliche Slice durch den Zeiger ändern.

Zum Beispiel:

func myAppend(list *[]string, value string) {
    *list = append(*list, value)
}
Nach dem Login kopieren

Aktualisierte Lösung

Anstatt einen Zeiger zu übergeben Zum Slice können Sie das geänderte Slice aus der rekursiven Funktion zurückgeben. Dadurch kann die Funktion die Werte im Slice akkumulieren und das Endergebnis an den Aufrufer zurückgeben.

func validate(obj Validatable, messages []ValidationMessage) ([]ValidationMessage, error) {
    // ...

    return validate(v, messages)
}
Nach dem Login kopieren

Idiomatischer Ansatz

Übergabe eines Zeigers auf den Slice oder Die Rückgabe des modifizierten Slice sind beides idiomatische Ansätze in Go. Die Wahl des zu verwendenden Ansatzes hängt von den spezifischen Anforderungen Ihrer Funktion ab.

Hinweis:

Bei der Verwendung von Zeigern zum Ändern von Slices ist es wichtig, sicherzustellen, dass die Zeiger nicht Null sind und dass die Slices nicht gleichzeitig geändert werden.

Das obige ist der detaillierte Inhalt vonWie kann ich ein Slice in einer Go-Funktion ändern, ohne das Original zu beeinträchtigen?. 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