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)

参考:
golang.jp - プログラミング言語Goの情報サイト