Ä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) }
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) }
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!