Go の Slice には落とし穴があります。 これは、 Slice 特有の、参照データ型のようでありながら完全な参照とも言い切れない、少し変わった挙動に由来します。 Slice を関数に渡し、その関数内で変更した場合 Arrayと対比することで挙動がわかりやすくなるので、まず、Arrayについて見てみます。 次のようなコードを実行してみます。 package main import "fmt" func main() { var a [5]int // array for i := 0; i < 5; i++ { a[i] = i } fmt.Printf("1. a: %v\n", a) modifyArray(a) fmt.Printf("3. a: %v\n", a) } func modifyArray(a [5]int) { a[2] = 9 fmt.Printf("2. a: