Slices als Referenz übergeben, um das ursprüngliche Slice zu ändern
In Go werden Slices als Wert übergeben, was bedeutet, dass ein Slice innerhalb einer Funktion geändert wird hat keinen Einfluss auf das Original-Slice außerhalb der Funktion. Um diese Einschränkung zu überwinden, können Sie einen Zeiger auf das Slice übergeben, sodass die Funktion das ursprüngliche Slice per Referenz ändern kann.
Übergabe eines Zeigers an ein Slice
An Um einen Zeiger auf ein Slice zu übergeben, muss die Funktionssignatur einen Zeigertyp für das Slice enthalten Parameter:
func modifySlice(slice *[]int) { *slice = append(*slice, 4) }
Beispiel:
nums := []int{1, 2, 3} modifySlice(&nums) fmt.Println(nums) // Prints [1, 2, 3, 4]
In diesem Beispiel nimmt die Funktion „modifySlice“ einen Zeiger auf ein Segment von Ganzzahlen. Innerhalb der Funktion dereferenziert der Sternchen (*)-Operator den Zeiger, um das ursprüngliche Slice zu erhalten, und hängt dann 4 an das Slice an.
Zurückgeben eines geänderten Slice
Ein anderer Ansatz besteht darin, das geänderte Slice von der Funktion zurückzugeben:
nums := []int{1, 2, 3} func modifyAndReturnSlice(slice []int) []int { return append(slice, 4) } nums = modifyAndReturnSlice(nums) fmt.Println(nums) // Prints [1, 2, 3, 4]
Dieser Ansatz ist in Go idiomatisch und erfordert keine Übergabe von a Zeiger auf das Slice.
Auswahl des geeigneten Ansatzes
Die Wahl zwischen der Übergabe eines Zeigers auf ein Slice oder der Rückgabe eines modifizierten Slice hängt von den spezifischen Anforderungen Ihrer Funktion ab Codestruktur. Die Übergabe eines Zeigers ist oft nützlich, wenn Sie mehrere Slices iterieren und ändern müssen oder wenn die Änderungen komplex sind. Die Rückgabe eines geänderten Slice ist vorzuziehen, wenn die Funktion nur ein einzelnes Slice ändern muss und die Änderungen unkompliziert sind.
Das obige ist der detaillierte Inhalt vonWie kann ich ein Go-Slice in einer Funktion ändern und die Änderungen im Original-Slice widerspiegeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!