#7 Goで学ぶ配列の基本

Goには、複数の値をまとめて扱うためのデータ構造として、「配列」と「スライス」という2種類の仕組みがあります。この記事では、それぞれの違いと基本的な使い方を解説します。

配列(固定長)

Goの配列は、大きさがあらかじめ決まっていて、後から変更できません。

var fruits [3]string = [3]string{"りんご", "みかん", "ぶどう"}

スライス(可変長)

実際の開発では、大きさを自由に変えられる「スライス」を使うのが一般的です。

fruits := []string{"りんご", "みかん", "ぶどう"}
fruits = append(fruits, "メロン")

配列の宣言と似ていますが、大きさの数字を書かない点が違いです。値を追加するにはappend()という関数を使います。

要素にアクセスする・繰り返す

配列・スライスどちらも、0から始まる添字でアクセスします。

fmt.Println(fruits[0])

for i, fruit := range fruits {
    fmt.Println(i, fruit)
}

スライスの一部を切り出す

スライスには、既存のスライスの一部分だけを取り出す「スライス式」という書き方があります。

numbers := []int{10, 20, 30, 40, 50}
part := numbers[1:3] // [20, 30](添字1から3未満)
fmt.Println(part)

この「スライス」という名前は、実はこの「切り出す」という操作に由来しています。

makeで初期サイズを指定する

あらかじめサイズが分かっている場合は、makeという関数でスライスを作ると、appendのたびにメモリの再確保が起きるのを防げます。

scores := make([]int, 0, 10) // 長さ0、容量10のスライス

Goならではの注意点

Goのappend()は、Pythonのappend()のように直接中身を追加するのではなく、「追加された新しいスライスを返す」という書き方をします。そのため、fruits = append(fruits, "メロン")のように、必ず結果を元の変数に代入し直す必要があります。この代入を忘れると、追加した値が反映されないので注意しましょう。また、スライスは内部的に配列への参照を持っているため、あるスライスから切り出した別のスライスを変更すると、元のスライスにも影響が及ぶことがある点にも注意が必要です。

まとめ

Goには固定長の「配列」と可変長の「スライス」があり、実用上はスライスを使う場面が多くなります。append()の結果を代入し直す書き方の癖や、スライス式による部分的な切り出しも覚えておきましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Goをもっと学びたい方には「Go言語入門」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本