Go のスライスの基本(宣言・初期化・要素アクセス)
Go のスライスは、同じ型の要素を連続して格納できる可変長のデータ構造です。配列と似ていますが、サイズを動的に変更できる点が大きな特徴です。
スライスの宣言
スライスを宣言するには、型の前に [] を付けます。宣言しただけの状態では、スライスの値は nil になります。
var numbers []int
fmt.Println(numbers == nil) // trueスライスリテラルで初期化
配列リテラルと似た構文で、初期値を持つスライスを作成できます。
fruits := []string{"apple", "banana", "cherry"}
fmt.Println(fruits) // [apple banana cherry]配列との違いは、[] の中にサイズを書かない点です。[3]string なら配列、[]string ならスライスになります。
make でスライスを作成
make 関数を使うと、長さと容量を指定してスライスを作成できます。
// make(型, 長さ, 容量)
slice1 := make([]int, 5) // 長さ5、容量5
slice2 := make([]int, 3, 10) // 長さ3、容量10長さはスライスに現在含まれる要素数、容量は背後の配列が確保しているサイズです。容量を省略すると、長さと同じ値になります。
要素へのアクセス
スライスの要素には、インデックスを使ってアクセスします。インデックスは 0 から始まります。
colors := []string{"red", "green", "blue"}
fmt.Println(colors[0]) // red
fmt.Println(colors[2]) // blue
colors[1] = "yellow"
fmt.Println(colors) // [red yellow blue]存在しないインデックスにアクセスすると、実行時にパニックが発生します。
colors := []string{"red", "green", "blue"}
fmt.Println(colors[5]) // panic: index out of rangelen で長さを取得
len 関数でスライスの長さ(要素数)を取得できます。
numbers := []int{10, 20, 30, 40}
fmt.Println(len(numbers)) // 4スライスが nil の場合、len は 0 を返します。これはエラーにならないため、安全に長さをチェックできます。