カテゴリ: Go言語 更新日: 2025/12/21

Go言語の配列の基本!定義・初期化・アクセス方法をやさしく解説

Go言語の配列の基本!定義・初期化・アクセス方法をやさしく解説
Go言語の配列の基本!定義・初期化・アクセス方法をやさしく解説

先生と生徒の会話形式で理解しよう

生徒

「Goでよく聞く“配列”って何ですか?どうやって使うんでしょう?」

先生

「配列は同じ種類のデータを順番に並べた“箱”のようなものです。数字や文字をグループで扱えるんですよ。」

生徒

「グループ?どうやって作るんですか?」

先生

「順を追って、定義・初期化・アクセスまで、やさしく見ていきましょう!」

1. Go言語における配列とは?

1. Go言語における配列とは?
1. Go言語における配列とは?

Goの配列(array)は、同じ型のデータを一定個数だけ並べて扱うための入れ物です。あらかじめ「いくつ入るか(長さ)」が決まっており、途中で増えたり減ったりはしません。

イメージとしては「リンゴが5個だけ入る仕切り付きの箱」。箱の数=配列の長さが決まっているので、入れる果物の種類(型)も大きさ(長さ)も最初に確定します。決まった数をきちんと並べたいときに向いています。

まずは「整数が3つ入る配列」を作って、中身をまとめて表示してみましょう。


package main

import "fmt"

func main() {
    // 整数を3つだけ入れられる配列(固定長)
    nums := [3]int{10, 20, 30}
    fmt.Println(nums) // [10 20 30] と表示される
}

ここでは[3]intという“型”で、「整数が3個入る配列」を表しています。数を4個や2個に変えたいなら、[4]int[2]intといったように長さを含めて型を決めるのがポイントです。まずは「同じ型を、決まった数だけ並べる箱」だと覚えておけば十分です。

2. 配列の定義と初期化

2. 配列の定義と初期化
2. 配列の定義と初期化

配列は次のように書きます:


var nums [5]int

これは「整数(int)を5つ入れる配列」と定義し、初期化(0で埋められます)されています。0や""など、ゼロ値(zero value)で初期化されるのがGoの特徴です。

初期値付きで書くと:


nums := [5]int{1, 2, 3, 4, 5}

これで1〜5の数字を持つ配列が作れます。

3. 要素へのアクセス方法

3. 要素へのアクセス方法
3. 要素へのアクセス方法

配列から値を取り出すには、添字(index)を使います。添字は0から始まります。


fmt.Println(nums[0]) // 1
nums[2] = 99         // 3番目を99に変更
fmt.Println(nums[2]) // 99

このように添字で箱を指定して値を取り出したり、変更したりできます。なお、添字が範囲外だとエラーになります。

4. len関数でサイズを取得する

4. len関数でサイズを取得する
4. len関数でサイズを取得する

配列の長さはlen(nums)で調べられます。たとえば:


fmt.Println(len(nums)) // 5

この数字を使って、後でループ処理などがしやすくなります。

5. forループと配列

5. forループと配列
5. forループと配列

配列の中身を順番に処理するにはforループを使います。


for i := 0; i < len(nums); i++ {
  fmt.Println(i, nums[i])
}

これは「iが0から長さ未満まで」の間、順番に値を取り出す方法です。

6. rangeを使ったイディオム

6. rangeを使ったイディオム
6. rangeを使ったイディオム

Goではもっとかんたんに配列をループする方法があります:


for idx, val := range nums {
  fmt.Println(idx, val)
}

rangeは「配列(やスライス、マップ)を範囲指定する」という意味で、添字と値を自動で取り出せます。

7. 配列とスライスの違い

7. 配列とスライスの違い
7. 配列とスライスの違い

Goには配列と似ているスライス(slice)という仕組みもあります。スライスは長さが変えられる配列のようなもので、初心者にはスライスの方が使いやすいです。

配列は固定数、スライスは「伸び縮みする箱」と覚えるとイメージしやすいです。

8. 配列のコピーに注意!

8. 配列のコピーに注意!
8. 配列のコピーに注意!

配列を別の変数に代入すると、中身が全部コピーされます。大きな配列ではメモリが余計に使われるので注意が必要です。

たとえば:


a := [5]int{1,2,3,4,5}
b := a
b[0] = 100
fmt.Println(a[0]) // 1(元の値は変わらない)

これは意図しないデータのずれを防ぐための動作です。

9. どんなときに配列を使う?

9. どんなときに配列を使う?
9. どんなときに配列を使う?

配列は小さくて固定サイズのデータを使うときに向いています。たとえば「週7日分の気温」などです。

一方で、可変長データの場合はスライスを使うのが一般的です。

まとめ

まとめ
まとめ

Go言語における配列(array)は、同じ型のデータを決まった数だけ並べて扱うための非常に基本的かつ重要な仕組みです。この記事では、Go配列の定義・初期化方法、要素へのアクセス、長さの取得、ループ処理との連携、rangeを使った効率的なループ、配列とスライスの違い、コピーの注意点、さらには配列の利用シーンまでを、初心者にもわかりやすく解説しました。

特にGo言語における配列は「長さも型の一部」として扱われるため、CやJavaScriptなど他の言語に慣れている人にとっては少し注意が必要です。Goでは[3]int[4]intはまったく異なる型として扱われるため、型の一致が重要になります。

一方で、スライス(slice)はより柔軟にデータを扱えるため、可変長データを扱う場合はスライスが推奨されます。しかし、配列は要素数が厳密に決まっている状況では、可読性・保守性・パフォーマンスの観点から非常に有効です。

また、for文やrangeを使ったループでは、それぞれ異なるメリットがあります。for i := 0の形式はインデックスの管理が明示的で、rangeはより簡潔に書けて読みやすいという特徴があります。使い分けることで、より意図が明確なコードを書くことができるでしょう。

配列を別の変数に代入した際には中身がコピーされるという点もGo特有の仕様です。これはバグを防ぐ上では役に立ちますが、大きな配列を頻繁にコピーしてしまうとメモリ効率が悪くなるため、必要に応じてスライスやポインタの活用を検討しましょう。

最後に、配列を使うべき場面としては、要素数が不変であると明確に分かっているケースです。例としては「曜日の一覧(7要素)」「RGBカラー(3要素)」「月の名前(12要素)」などがあります。これらは配列として定義することで、コード上にもその意図が明確に表れ、将来的な保守においても安心です。

固定長の例としての再サンプル:月の名前を表示


package main

import "fmt"

func main() {
    months := [12]string{"Jan", "Feb", "Mar", "Apr", "May", "Jun",
                         "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
    for _, m := range months {
        fmt.Println(m)
    }
}

上記のように、「12個あることが前提」のデータを配列で表現すると、設計意図が明確になり、エラーの混入も防ぎやすくなります。

先生と生徒の振り返り会話

生徒

「配列ってただデータを並べるだけじゃなくて、“数が決まってること”を明確にする役割もあるんですね!」

先生

「そのとおり。配列は“何個あるか”を最初から確定させることで、バグの防止や意図の明示につながるんだ。」

生徒

「rangeでループするときも書き方がすっきりしていて、スライスにも応用できそうですね。」

先生

「うん、rangeはGoらしい書き方だし、for文と使い分けできるようになればより強くなれるよ。」

生徒

「今日は“固定長データの管理”の基本がしっかりわかった気がします!」

先生

「よくできました!配列の考え方は、Goだけでなく他の言語にもつながるから、しっかり身につけておこう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Go言語の配列とは何ですか?配列と変数の違いを初心者向けに教えてください

Go言語の配列とは、同じ型のデータを決まった数だけ入れられる「箱」が横に並んだ仕組みです。変数はひとつの値しか入りませんが、配列は複数の値を番号付きで管理できます。同じ型で固定サイズという点がポイントで、Goの配列は必ず要素数が決まっています。
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinの構文ルールまとめ!インデント・セミコロンなど初心者が最初に覚えるべきポイント
New2
Kotlin
Kotlinの関数ドキュメンテーションコメント(KDoc)の書き方を徹底解説!初心者でもわかる丁寧なガイド
New3
Kotlin
KotlinでHello Worldを表示するには?最初の1行を実行してみよう
New4
Go言語
Go言語の依存関係管理を始めよう!go modの基本設定と導入手順
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.2
Java&Spring記事人気No2
Kotlin
KotlinのAPI通信でGETリクエストを送る方法!初心者向け徹底ガイド
No.3
Java&Spring記事人気No3
Go言語
Go言語のテストでタイムアウト・並行処理を扱うポイント
No.4
Java&Spring記事人気No4
Swift
SwiftのURLSessionでのネットワークエラー対策!再試行とタイムアウトを初心者向けに解説
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Go言語
Go言語のWebアプリにおけるセキュリティベストプラクティス集
No.7
Java&Spring記事人気No7
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.8
Java&Spring記事人気No8
Swift
Swift JSONデコード失敗の原因と対処|DecodingError徹底解説