Wpis z mikrobloga

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

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
  • 2
  • Odpowiedz
@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ć:

func test(x *[]int) {
*x = append(*x, 10)
}

Ale ładniej (bardziej golangowo) byłoby:

func test(x []int) []int {
return append(x, 10)
}

oraz

x = test(x)
  • Odpowiedz