目次へ

7. スライス

7.1 スライスとは

スライスは、すべての要素が同じ型の可変長列で、配列の要素の部分列、あるいはすべてを参照します。
スライスは以下の3つから構成されます。

  • 配列へのポインタ
    参照する領域の、先頭の要素のアドレスをコピーする。
  • 要素の長さ
    スライスの要素数。
  • キャパシティ(容量)
    スライスの開始から参照する配列の終わりまでの要素数。

7.2 スライスの定義

スライス型の定義では、「要素の型」を明記します。

[]要素の型

// 例: int型
[]int

7.3 スライス式

配列からスライスを作成したり、スライスから新たにスライスを作成することができます。

元の配列またはスライス[下限値:上限値]

// 配列arrayのインデックス1~3を参照
// キャパシティは"cap(配列スライスの値)"で調べることが出来る
slice := array[1:4]
fmt.Println(slice)  // “[b c d]”が出力される
fmt.Println(cap(slice)) // “4”が表示される

// 配列arrayの全体を参照
slice2 := array[:]
fmt.Println(slice2) // “[a b c d e]”が出力される
fmt.Println(cap(slice2)) // ”5”が表示される

// 配列arrayのインデックス2~4を参照
slice3 := array[2:]
fmt.Println(slice3) // “[c d e]”が出力される
fmt.Println(cap(slice3)) // “3”が表示される

// 配列arrayのインデックス0~3を参照
slice4 := array[:4]
fmt.Println(slice4) // “[a b c d]”が出力される
fmt.Println(cap(slice4)) //”5”が表示される

サンプルコード

7.4 スライスの初期化

初期化の方法を2つ紹介します。

make を使う方法

make は組み込み関数で、要素の型、長さ、キャパシティ(容量)を指定し、初期化を行います。

make([]要素の型, 長さ, キャパシティ)
make([]要素の型, 長さ)

make を使用するときは、キャパシティを省略することもできます。
その場合、キャパシティは長さと等しくなります。

また、make では初期値を設定することができないため、スライスの要素には指定した型のゼロ値が入ります。

//長さ10, キャパシティ20のスライスを定義する
slice1 := make([]int, 10, 20)

// 長さ10のスライスを定義する
slice2 := make([]int, 10)

// 初期値を設定していないので要素はint型のゼロ値が入る
// slice1とslice2の長さは同じなので、出力される要素数は同じ
fmt.Println(slice1) // “[0 0 0 0 0 0 0 0 0 0]”が出力される
fmt.Println(slice2) // “[0 0 0 0 0 0 0 0 0 0]”が出力される

// slice2はキャパシティの値を指定していないので、長さと同じ"10"になる
// キャパシティは"cap(スライスの値)"で調べることが出来る
fmt.Println(cap(slice1)) // “20”が出力される
fmt.Println(cap(slice2)) // “10が出力される”

サンプルコード

スライスリテラルを使用する方法

要素の型の後ろに {} を付け、初期値を入れます。

[]要素の型{要素の初期, ...}

// 例: int型
[]int{1, 2, 3}

サンプルコード

7.5 スライス要素へのアクセス

配列と同様、スライスは [] を使用して要素にアクセスすることができます。

var s []string{“a”, “b”, “c”}
// インデックス0に”zero”を代入します
s[0] = “zero”
fmt.Println(s)
// [zero, b, c]が出力される

サンプルコード

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp