Go言語の配列の基本!定義・初期化・アクセス方法をやさしく解説
生徒
「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通りがあります。どちらも「同じ型を、決まった数だけ並べる」という配列の性質をそのまま表します。
① 長さだけ決めて定義する(ゼロ値で自動初期化)
var nums [5]int
// ここで nums は [0 0 0 0 0]。int のゼロ値 0 で埋まる
この書き方は「整数を5個入れる空の箱」を用意するイメージです。Goでは未指定の要素はゼロ値(intなら0、stringなら"")で初期化されるため、安心して後から値を入れられます。
② 初期値つきで定義する(配列リテラル)
nums := [5]int{1, 2, 3, 4, 5}
最初から並びを決めたいときは、波かっこ内に順番通りに書きます。長さと型([5]int)がはっきりするので、後のコードを読む人にも意図が伝わります。
長さを自動で数えてもらう([...] の省略記法)
days := [...]string{"Mon", "Tue", "Wed"} // 長さは 3 に推論される
要素数がそのまま長さになるので、「いくつ並べたか」で長さを決めたい場面に便利です。
初心者向けの最小サンプル(定義と初期化の違いを目で確認)
package main
import "fmt"
func main() {
var a [3]int // ゼロ値で [0 0 0]
b := [3]int{10, 20, 30} // 初期値つき
c := [...]string{"A", "B"} // 長さを自動推論(2)
fmt.Println(a) // [0 0 0]
fmt.Println(b) // [10 20 30]
fmt.Println(c) // [A B]
}
まずは「長さと型をセットで決める」「未指定の要素はゼロ値になる」「[...]で長さを推論できる」の3点を押さえておけば、配列の用意は十分です。
3. 要素へのアクセス方法
配列から値を取り出すには、添字(index)を使います。添字は0から始まります。
fmt.Println(nums[0]) // 1
nums[2] = 99 // 3番目を99に変更
fmt.Println(nums[2]) // 99
このように添字で箱を指定して値を取り出したり、変更したりできます。なお、添字が範囲外だとエラーになります。
4. len関数でサイズを取得する
配列の長さはlen(nums)で調べられます。たとえば:
fmt.Println(len(nums)) // 5
この数字を使って、後でループ処理などがしやすくなります。
5. forループと配列
配列の中身を順番に処理するにはforループを使います。
for i := 0; i < len(nums); i++ {
fmt.Println(i, nums[i])
}
これは「iが0から長さ未満まで」の間、順番に値を取り出す方法です。
6. rangeを使ったイディオム
Goではもっとかんたんに配列をループする方法があります:
for idx, val := range nums {
fmt.Println(idx, val)
}
rangeは「配列(やスライス、マップ)を範囲指定する」という意味で、添字と値を自動で取り出せます。
7. 配列とスライスの違い
Goには配列と似ているスライス(slice)という仕組みもあります。スライスは長さが変えられる配列のようなもので、初心者にはスライスの方が使いやすいです。
配列は固定数、スライスは「伸び縮みする箱」と覚えるとイメージしやすいです。
8. 配列のコピーに注意!
配列を別の変数に代入すると、中身が全部コピーされます。大きな配列ではメモリが余計に使われるので注意が必要です。
たとえば:
a := [5]int{1,2,3,4,5}
b := a
b[0] = 100
fmt.Println(a[0]) // 1(元の値は変わらない)
これは意図しないデータのずれを防ぐための動作です。
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の配列は必ず要素数が決まっています。
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!