Go-lang:配列型とスライス型
配列型は値が順番に並んでいるイメージ。スライス型は値の参照(ポインタ)が並んでいる。
例えば、行列に人がそのまま並ぶのが配列型。スライス型は行列の代わりに順番を記述した整理券を配っている(並んでいる)イメージ。整理券には実体である人がいる。
hello.go
package main import "fmt" func main() { var kv1 [2]int = [2]int{ 2, 3 } // 配列型として初期化 var kv2 = kv1 // 配列型を代入。値がコピーされる kv2[0] = 1 // kv1[0]は元の値のまま var kv3 []int = []int{ 2, 3 } // スライス型として初期化 var kv4 = kv3 // 値の参照(ポインタ)がコピーされる kv4[0] = 1 // 参照先の値を変更するのでkv3[0]も値が変わる fmt.Printf("kv1=(%T)(%d,%d) kv2=(%T)(%d,%d)\n", kv1,kv1[0],kv1[1],kv2,kv2[0],kv2[1]) fmt.Printf("kv3=(%T)(%d,%d) kv4=(%T)(%d,%d)\n", kv3,kv3[0],kv3[1],kv4,kv4[0],kv4[1]) }
~ $ 6g hello.go
~ $ 6l hello.6
~ $ ./6.out
出力:
kv1=([2]int)(2,3) kv2=([2]int)(1,3)
kv3=(int)(1,3) kv4=(int)(1,3)