カテゴリ: Go言語 更新日: 2026/01/10

Go言語のスライス・マップ・配列をまとめて比較してみよう!初心者でもわかる使い分けの基本

Go言語のスライス・マップ・配列をまとめて比較してみよう
Go言語のスライス・マップ・配列をまとめて比較してみよう

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

生徒

「先生、Go言語でスライス、マップ、配列ってありますけど、それぞれどう違うんですか?どれを使えばいいのか迷います…」

先生

「良い質問です。スライス、マップ、配列はデータをまとめて扱うときに使う構造ですが、特徴や使い方が違います。今回はそれぞれの違いをわかりやすく説明しますね。」

生徒

「ぜひお願いします!具体的にどう違うのか知りたいです。」

先生

「では、基本的なことから順番に説明していきましょう!」

1. 配列(Array)とは?

1. 配列(Array)とは?
1. 配列(Array)とは?

配列は「同じ種類のデータを決まった数だけ並べた箱」のようなものです。サイズ(要素数)が決まっていて変わらないことが特徴です。

例えば、5つの整数を保存したいときは、5個分の箱を用意し、その中に値を順番に入れます。

配列は使うときにサイズを決めて固定するので、大きさを途中で変えられません。


var arr [5]int // 整数型の要素が5つの配列
arr[0] = 10    // 1番目の要素に10を入れる

配列のサイズは固定なので、あとから要素を増やしたり減らしたりはできません。

2. スライス(Slice)とは?

2. スライス(Slice)とは?
2. スライス(Slice)とは?

スライスは「配列のサイズが決まっていない、もっと自由に使える箱」のようなものです。必要に応じてサイズが増えたり減ったりします

配列の便利な点は残しつつ、サイズ変更が簡単にできるので、よく使われます。


var slice []int       // 整数型のスライス(サイズは決まっていない)
slice = append(slice, 10) // 値を追加

append関数を使うと、新しい要素を簡単にスライスに追加できます。

スライスは内部的に配列を使っていますが、サイズ変更が自由なので、柔軟に扱えます。

3. マップ(Map)とは?

3. マップ(Map)とは?
3. マップ(Map)とは?

マップは「キー(名前)と値をセットにして保存する箱」のようなものです。英語で「連想配列」とも呼ばれます。

数字の順番ではなく、好きな名前(キー)で値を取り出せるので便利です。


var m map[string]int
m = make(map[string]int) // マップの作成
m["apple"] = 100         // "apple"というキーに100をセット

たとえば、「りんご」という名前で値を保存し、あとで「りんご」の値だけを取り出せます。

4. 配列・スライス・マップの違いを表で比べてみよう

4. 配列・スライス・マップの違いを表で比べてみよう
4. 配列・スライス・マップの違いを表で比べてみよう
特徴 配列 スライス マップ
サイズ 固定(変更不可) 可変(増減可能) 可変(キーと値のセット)
データの順番 順番が決まっている 順番が決まっている 順番は保証されない
要素のアクセス方法 番号(インデックス)でアクセス 番号(インデックス)でアクセス キー(名前)でアクセス
使いどころ サイズが固定で要素数が決まっている場合 要素数が変わる可能性がある場合 名前付きのデータを扱いたい場合
初期化 宣言時にサイズ指定 宣言後にmakeやリテラルで初期化 make関数で初期化必須

5. どんなときに何を使う?

5. どんなときに何を使う?
5. どんなときに何を使う?

それぞれの特徴を踏まえて、よくある使い分け例を紹介します。

  • 配列:小さくてサイズが変わらないデータ。例えば曜日の名前など。
  • スライス:動的に増減するデータ。例えばユーザーが追加できるリスト。
  • マップ:名前(キー)で値を管理。例えば商品の名前と価格の対応表。

6. まとめてコード例を見てみよう

6. まとめてコード例を見てみよう
6. まとめてコード例を見てみよう

package main

import "fmt"

func main() {
    // 配列
    var arr [3]string
    arr[0] = "りんご"
    arr[1] = "みかん"
    arr[2] = "バナナ"
    fmt.Println("配列:", arr)

    // スライス
    slice := []string{"りんご", "みかん"}
    slice = append(slice, "バナナ")
    fmt.Println("スライス:", slice)

    // マップ
    m := make(map[string]int)
    m["りんご"] = 100
    m["みかん"] = 80
    fmt.Println("マップ:", m)
}

このコードでは、配列はサイズが決まっていて、スライスは要素を追加でき、マップは名前(キー)で値を管理しているのがわかります。

7. 使い分けのポイント

7. 使い分けのポイント
7. 使い分けのポイント

Go言語の配列・スライス・マップはどれも大切なデータ構造です。使い分けのポイントは、

  • データのサイズが決まっているか
  • 順番が重要か
  • 名前でアクセスしたいか

を考えて選びましょう。

まとめ

まとめ
まとめ

Go言語の配列やスライスやマップは、どれもデータをまとめて扱うための大切な仕組みであり、初心者が最初につまずきやすい部分でもあります。とくに配列は要素数が固定される特徴があり、スライスはサイズが自由に増減できる柔軟さを持ち、マップは名前による管理ができる便利な構造です。これらを正しく理解することで、データ操作の幅が大きく広がり、実践的なプログラムの設計がぐっと楽になります。配列は決まった数のデータを扱うときに向いており、スライスはユーザーが自由に追加できるリストなどのように変化のある場面で役立ちます。さらにマップは商品の名前や会員情報やカテゴリ名など「キーと値の組み合わせ」を扱うときに使われ、非常に多くの処理で利用されます。

初心者が混乱しやすいのは、配列とスライスが似ている点ですが、内部の仕組みが異なるため、使い分けを理解することが大切です。スライスは内部に配列を持っていますが、サイズが自動的に変わり、appendを使うことで簡単に値を追加できます。これにより、スライスはGo言語で最も頻繁に使われるデータ構造となっています。一方、配列はサイズが変わらないという制約があるため、実務ではあまり多用されませんが、メモリ管理や固定データの扱いにおいて重要な役割を持ちます。マップは名前でアクセスできるため非常に便利ですが、順番が保証されないという特徴があり、並び順が必要なプログラムでは注意が必要です。

また、配列やスライスやマップを使った処理では、for文やレンジ構文や条件分岐など基本的な構文と組み合わせることで、より複雑な処理が可能になります。特にスライスとマップは、実際のアプリケーション開発において入力データや結果の保持や情報の管理に欠かせない存在です。配列は学習用として理解しておくことでスライスの仕組みを深く知ることができ、それが後々大きな理解につながります。さらにマップはWebアプリケーションでの設定情報、商品リスト、ユーザー情報など、ありとあらゆる場面で使われるため、初心者のうちに慣れておくと必ず役に立ちます。

ここではまとめとして、配列とスライスとマップの特徴を簡潔に整理し、より実践的なコード例も少し紹介します。大切なのは「どの場面でどの構造を選ぶべきか」を自分で判断できるようになることです。データの数が固定なら配列、増える可能性があるならスライス、名前で管理したいならマップという三つの軸を意識すると、適切な選択が自然にできるようになります。実際のプログラムを書くときには、これらの特徴をふまえて組み合わせることで、より読みやすく、より使いやすいコードになります。

まとめとしてのサンプルプログラム


package main

import "fmt"

func main() {
    fruits := [3]string{"りんご", "みかん", "バナナ"}
    fmt.Println("配列:", fruits)

    list := []string{"りんご", "みかん"}
    list = append(list, "バナナ")
    fmt.Println("スライス:", list)

    table := make(map[string]int)
    table["りんご"] = 120
    table["みかん"] = 90
    fmt.Println("マップ:", table)
}

このサンプルでは配列で固定データを扱い、スライスで可変データを追加し、マップで名前と値を管理するという典型的な使い分けを示しています。これらの構造を繰り返し使うことで、自然と自分の中にデータ構造の理解が定着していきます。どのデータ構造を使うか迷ったときは、用途や性質に応じて判断し、まずは簡単なコードで手を動かすことが理解への近道になります。実際の開発でも頻繁に登場するスライスやマップを早い段階で使いこなせるようになると、プログラムの表現力が大幅に高まり、より複雑なデータ処理にも挑戦できるようになります。

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

生徒
「今日学んだ配列やスライスやマップの違いがだいぶわかってきました。特にスライスが一番使いやすくて便利だと感じました。」

先生
「そうですね。スライスは可変で扱いやすいのでGo言語の実務でもよく使われます。配列は決まった数のデータに向いていて、マップは名前で値を管理したいときにとても役立ちます。」

生徒
「マップは順番が決まらないという特徴も勉強になりました。キーで管理する仕組みはアプリ開発でもよく使われそうですね。」

先生
「そのとおりです。配列とスライスとマップを正しく使い分けられるようになると、データ構造の理解が深まり、より読みやすく効率的なコードが書けるようになりますよ。」

生徒
「次はこれらを組み合わせてもっと複雑な処理にも挑戦してみたいです!」

先生
「ぜひ挑戦してみてください。今日学んだ基礎は必ず役に立つので、自信を持って書いていきましょう。」

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

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

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

Go言語で配列とスライスの違いは何ですか?初心者にもわかりやすく教えてください。

Go言語における配列はサイズが固定されていて、あとから要素を追加できません。一方、スライスはサイズが柔軟に変化でき、append関数で簡単に要素を追加できます。初心者にはスライスの方が扱いやすくおすすめです。
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinのforループの基本!範囲・配列・コレクションの繰り返し処理
New2
Go言語
Go言語のスライスでappend時のメモリの仕組みを理解しよう!初心者でもわかる基礎解説
New3
Go言語
Go言語のスコープとは?ローカル変数・グローバル変数の違いと使い分け
New4
Go言語
Go言語のhttp.ResponseWriterとhttp.Requestの仕組みを理解しよう
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.2
Java&Spring記事人気No2
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.3
Java&Spring記事人気No3
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.4
Java&Spring記事人気No4
Swift
Swiftで数値と文字列を相互変換!NumberFormatterで桁区切りや通貨表示をわかりやすく解説
No.5
Java&Spring記事人気No5
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
No.6
Java&Spring記事人気No6
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.7
Java&Spring記事人気No7
Kotlin
Kotlinで画面遷移を実装しよう!初心者でもわかるIntentの使い方完全ガイド
No.8
Java&Spring記事人気No8
Swift
SwiftPMでのバージョン指定と互換性の考え方を初心者向けに徹底解説