Slices effektiv in Go übergeben: Einschränkungen bei der Wertübergabe vermeiden
In Go erfolgt die Übergabe eines Slice als Funktionsargument im Wesentlichen über den Wert. Dies bedeutet, dass, wenn ein Argument-Slice innerhalb der Funktion mithilfe von „append“ geändert wird, dies keine Auswirkungen auf das ursprüngliche Slice außerhalb des Funktionsbereichs hat.
Um diese Einschränkung zu veranschaulichen, betrachten Sie das folgende Beispiel:
nums := []int{1, 2, 3} func addToNumbs(nums []int) []int { nums = append(nums, 4) fmt.Println(nums) // []int{1, 2, 3, 4} } fmt.Println(nums) // []int{1, 2, 3}
In diesem Beispiel bleiben die ursprünglichen Slice-Nummern trotz der Änderung innerhalb der Funktion addToNumbs unberührt. Um dieses Problem zu lösen, kann man stattdessen einen Zeiger auf das Slice übergeben:
func myAppend(list *[]string, value string) { *list = append(*list, value) }
Dieser Ansatz stellt sicher, dass das ursprüngliche Slice direkt geändert wird.
Alternativ kann in bestimmten Szenarien einfach das zurückgegeben werden Ein modifiziertes Slice aus der Funktion kann eine effiziente Lösung sein:
func validate(obj Validatable, messages []ValidationMessage) ([]ValidationMessage, error) { // Modification... return messages, nil }
Zusammenfassend lässt sich sagen, dass es bei der Übergabe eines Slice als Argument in Go wichtig ist, zu berücksichtigen, ob Änderungen darin vorgenommen werden Die Funktion sollte sich auf das ursprüngliche Slice auswirken. Wenn ja, sind die Verwendung eines Zeigers auf das Slice oder die Rückgabe des geänderten Slice effektive Ansätze, um das gewünschte Verhalten zu erreichen.
Das obige ist der detaillierte Inhalt vonWie kann ich als Argumente in Go übergebene Slices effektiv ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!