#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿