Go: sliceは参照渡しになるから注意。
jiroshin.icon 忘れたころにミスするからメモ。
code: Go
func main() {
a := []string{"a", "b", "c"}
b := a
fmt.Printf("ptr: %p\n", a)
fmt.Printf("ptr: %p\n", b)
fmt.Println(a)
fmt.Println(b)
exec(b)
fmt.Println(a)
fmt.Println(b)
}
func exec(arr []string) {
}
// ptr: 0xc0000121b0
// ptr: 0xc0000121b0
sliceは参照渡しのため、渡した先の引数や変数で変更を加えた場合に渡し元の値も書き換わる。
ついうっかりバグを生まないように気をつけよう。
ちなみに、配列の場合は値渡しとなることを覚えておこう。
jiroshin.icon 配列の一部を切り取ったものがsliceだと考えれば自然だね。