言語バージョン 1.15.3

公開日 November 11, 2020, GMT+9

更新日 January 2, 2021, GMT+9

array(配列)

arrayはGolangの型の1つであり、複数の要素を保持することが可能です。

arrayの長さは固定であり、初期化時点の長さから変更することはできません。
arrayとよく似た性質を持つ slice(スライス) という型も存在し、こちらは初期化時点から長さを変更することができます。
しかし、arrayはsliceとは全く異なる型であり、取り扱いに注意が必要です。

TL;DR

初期化

var array1 [3]int
fmt.Println(array1)
==> [0 0 0]



array2 := [2]bool{}
fmt.Println(array2)
==> [false false]



array3 := [4]string{"Golang", "PHP", "Perl", "COBOL"}
fmt.Println(array3)
==> [Golang PHP Perl COBOL]



array4 := [...]int{100, 200}
fmt.Println(array4)
==> [100 200]



// sliceの初期化
slice1 := []int{5, 4, 3, 2}
fmt.Println(slice1)
==> [5 4 3 2]

関連情報:特徴が似ているslice(スライス)型の解説

長さ、要素の数

var array1 [500]string
fmt.Println(len(array1))
==> 500



array2 := [...]int{0, 1, 2, 3}
fmt.Println(len(array2))
==> 4
// 配列の場合はcapも同様
fmt.Println(cap(array2))
==> 4

操作:代入

var array1 [2]bool
fmt.Println(array1)
==> [false false]
array1[0] = true
fmt.Println(array1)
==> [true false]



type Person struct {
  ID   int
  Name string
}
array2 := [...]Person{{123, "Jeff"}, {345, "Sophia"}}
fmt.Println(array2)
==> [{123 Jeff} {345 Sophia}]
array2[1] = Person{456, "Amelia"}
fmt.Println(array2)
==> [{123 Jeff} {456 Amelia}]



var array3 [5]int
fmt.Println(array3)
==> [0 0 0 0 0]
for i, _ := range array3 {
  array3[i] = i * i
}
fmt.Println(array3)
==> [0 1 4 9 16]

操作:取得

array1 := [3]string{"Golang", "Python", "JavaScript"}
fmt.Println(array1[1])
==> Python



array2 := [...]float64{2.64, 2.82}
for i := 0; i < len(array2); i++ {
  fmt.Println(array2[i])
}
==> 2.64
==> 2.82



type Language struct {
  ID   int
  Name string
}
array3 := [...]Language{{1, "English"}, {2, "Japanese"}, {3, "Spanish"}}
for _, v := range array3 {
  fmt.Println(v.Name)
}
==> English
==> Japanese
==> Spanish

操作:削除

// Golangのarrayは固定長のため、要素を削除することはできません

解説

初期化

arrayの初期化は sliceの初期化 に似ています。
角括弧[]の中に配列の長さを指定し、その後ろに要素として指定したい型を記述します。
波括弧{}を使用することで初期値を設定することもできます。 その際に長さを...と指定すると初期値で指定した数の要素と同様の長さのarrayが生成されます。

また、sliceと異なり初期化時に初期値を指定せずともデフォルト値で要素が満たされた値が生成されます。

var array1 [2]bool
fmt.Println(array1)
==> [false false]


array2 := [5]int{11, 22, 33, 44}
fmt.Println(array2)
==> [11 22 33 44 0]


array3 := [...]string{"Gopher", "Duke", "Lisp Alien"}
fmt.Println(array3)
==> [Gopher Duke Lisp Alien]

長さ、要素の数

組み込み関数のlenを使用することでarrayの長さ(要素の数)を取得することができます。
また、arrayの場合は組み込み関数のcapを使用することでも同じ値を取得できます。

array1 := [0]int{}
fmt.Println(len(array1))
==> 0
// capも同様
fmt.Println(cap(array1))
==> 0


array2 := [...]bool{true, true, false}
fmt.Println(len(array2))
==> 3

操作:代入

角括弧[]を使用して代入したい位置を0から始まるインデックスで指定し値を代入します。

array1 := [...]float64{1.414, 1.732}
fmt.Println(array1)
==> [1.414 1.732]
array1[0] = 3.141
fmt.Println(array1)
==> [3.141 1.732]

操作:取得

角括弧[]を使用して取得したい要素の位置をインデックスで指定します。

array1 := [...]string{"Golang", "Kotlin", "TypeScript"}
fmt.Println(array1[2])
==> TypeScript

操作:削除

Golangのarrayは固定長です。初期化の際に定義した長さから変更することはできません。 したがって、要素を削除して長さを変更することはできません。
要素を削除して長さを変更したい場合、 slice型の使用 を検討してください。

1次情報

Arrays - A Tour of Go

Arrays, slices (and strings): The mechanics of 'append' - The Go Blog

Source File src/builtin/builtin.go