Go 言語における「m配列(Arrays)」と「スライス(Slices)」は、データを格納し、管理するために非常に強力で便利なツールです。この記事では、Go 言語における配列とスライスの概念、使用方法、そしてそれらの違いについて深く掘り下げていきます。プログラミングにおいて、これらのデータ構造は多くの場面で使用され、効率的で柔軟なコードを書くための基盤を提供します。
配列(Arrays)の基本
配列は、同じ型の複数の要素を一度に格納できるデータ構造です。Go 言語における配列は固定長であり、宣言時にそのサイズを指定する必要があります。配列のサイズは変更できないため、固定長のデータを管理する場合に便利です。

配列の宣言と初期化
配列は次のように宣言することができます。
govar arr [5]int
このコードでは、arr
という配列を宣言し、5つの整数を格納できるようにしています。Go 言語では、配列を宣言すると自動的にその要素はゼロ初期化されます(この場合、整数は 0
で初期化されます)。
配列の初期化を同時に行いたい場合は、次のように記述できます。
goarr := [5]int{1, 2, 3, 4, 5}
このようにすることで、配列に値を割り当てることができます。
配列のアクセス
配列の各要素にはインデックスを使ってアクセスできます。インデックスは0から始まります。
gofmt.Println(arr[0]) // 1
fmt.Println(arr[1]) // 2
上記のコードでは、配列 arr
の最初の要素(インデックス 0
)にアクセスしています。
配列の制約
Go 言語の配列は固定長のため、サイズを変更することができません。配列のサイズを変更したい場合は、新たに別の配列を作成する必要があります。この特性は、動的にサイズを変更する必要のないケースでは便利ですが、柔軟性を欠く場合もあります。
スライス(Slices)の基本
スライスは、Go 言語における動的な配列のようなもので、配列の一部を切り取ったり、サイズを動的に変更したりすることができます。スライスは、配列をラップする軽量のデータ構造であり、サイズが変更可能です。
スライスの宣言と初期化
スライスは配列と異なり、サイズを指定する必要はありません。スライスは次のように宣言して初期化できます。
govar slice []int
また、スライスは配列と同様に初期化することもできます。
goslice := []int{1, 2, 3, 4, 5}
スライスは最初から指定したサイズを持ちますが、後でそのサイズを変更することができます。
スライスの長さと容量
スライスには「長さ」と「容量」があります。
-
長さ(Length)は、スライスが現在保持している要素の数を指します。
-
容量(Capacity)は、スライスが内部的に保持できる最大の要素数を指します。
スライスの長さと容量は、次のようにして確認できます。
gofmt.Println(len(slice)) // スライスの長さ
fmt.Println(cap(slice)) // スライスの容量
スライスの要素の追加
スライスの最も強力な機能は、要素を追加することができる点です。append
関数を使って、新しい要素をスライスの末尾に追加できます。
goslice = append(slice, 6)
fmt.Println(slice) // [1 2 3 4 5 6]
append
関数は新しいスライスを返すので、元のスライスを更新するためには戻り値を受け取る必要があります。
スライスのスライシング
スライスは、配列の一部を簡単に切り取ることができます。これを「スライシング」と呼びます。スライスの一部を切り取るには、次のように記述します。
gosubSlice := slice[1:3] // インデックス1からインデックス2まで
fmt.Println(subSlice) // [2 3]
このコードでは、スライスのインデックス1からインデックス2までの部分を新しいスライス subSlice
として切り取っています。
スライスと配列の違い
配列とスライスの主な違いは、サイズ変更が可能かどうかです。配列は固定長であるのに対して、スライスは動的にサイズを変更することができ、柔軟に利用できます。スライスは内部で配列を使用しているため、スライスの変更は元の配列に影響を与えることがありますが、配列の変更はスライスに反映されません。
配列とスライスの使い分け
配列とスライスは用途に応じて使い分けるべきです。固定長のデータを保持したい場合には配列を使用し、動的にサイズを変更する必要がある場合や柔軟にデータを扱いたい場合にはスライスを使用します。特にスライスは、Go 言語で頻繁に使われるデータ構造であり、標準ライブラリでも広く利用されています。
結論
Go 言語における配列とスライスは、それぞれの用途に応じて使い分けることが重要です。配列は固定長のデータを効率的に扱うために使用され、スライスは動的なデータ操作に非常に適しています。Go 言語では、スライスの機能が非常に強力であり、日常的に多くの場面でスライスが使用されるため、これらの基本的な概念を理解しておくことが重要です。