Go'da slicelar bir fonksiyona parametre olarak verildiklerinde, orjinal value'yu referans ediyor. Bu sebeple fonksiyon icerisinde slice'in bir elemanini degistirdigimizde orjinal slice da degisir.

package main

import "fmt"

func main() {
    a := []int{1, 2, 3, 4}
    foo(a)

    fmt.Println(a) // [10, 2, 3, 4]
}

func foo(s []int) {
    s[0] = 10
}

Play

Yukarida goruldugu gibi foo fonksiyonuna slice'i pointer olarak vermememe ragmen orjinal slice degisti.

Go Slices: usage and internals