W golangu wartości są przekazywane przez wartość. Dlaczego poniższy kod nie dodaje mi 10 do slice? Wykorzystałem pointer, ale wartość się nie zmieniła.
func test(x *[]int) { xx := *x xx = append(xx, 10) }
@Codix: w uproszczeniu, nie wdając się w szczegóły, to append zwraca nowy slice, a nie zmienia istniejący. A ty ten nowy slide zapisujesz do lokalnie stworzonej nowej zmiennej. By to działało to powinieneś zrobić:
Wykorzystałem pointer, ale wartość się nie zmieniła.
func test(x *[]int) {
xx := *x
xx = append(xx, 10)
}
func main() {
x := make([]int, 0)
x = []int{1, 2, 3}
fmt.Println(x)
test(&x)
fmt.Println(x)
https://go.dev/play/p/EG3wIvrTp9z
#golang
func test(x *[]int) {*x = append(*x, 10)
}
Ale ładniej (bardziej
https://go.dev/play/p/bum1IkrCN_0
Można to uprościć do jednej linii
https://go.dev/play/p/2i2IKbiFWlQ