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

Go言語のスライスの基本!配列との違い・使い方を理解しよう

Go言語のスライスの基本!配列との違い・使い方を理解しよう
Go言語のスライスの基本!配列との違い・使い方を理解しよう

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

生徒

「Go言語で配列とよく一緒に出てくる“スライス”って何ですか?違いは何でしょう?」

先生

「スライスは配列の便利で柔軟なバージョンだと考えてください。配列はサイズが決まっていて変えられませんが、スライスは必要に応じてサイズを変えられます。」

生徒

「サイズが変えられるってどういうこと?具体的にはどう使うんですか?」

先生

「それでは、スライスの定義から使い方まで、順番にわかりやすく説明していきますね!」

1. スライスとは?配列との違い

1. スライスとは?配列との違い
1. スライスとは?配列との違い

スライス(slice)は、配列の一部や全部を柔軟に扱うためのデータ構造です。配列はサイズが決まっていて、例えば5個だけデータを持つ配列は、ずっと5個のままです。

一方スライスは、必要な分だけのデータを扱えて、あとからサイズを増やしたり減らしたりできる「伸び縮みする箱」のようなものです。

イメージで言うと、配列は「固定サイズの引き出し」、スライスは「必要に応じて大きさを変えられる引き出し」です。

2. スライスの定義と初期化

2. スライスの定義と初期化
2. スライスの定義と初期化

スライスは次のように定義します:


var s []int

これは「整数のスライスsを作る」という意味で、まだデータは入っていません。

スライスを初期化して、値を入れるときは:


s := []int{10, 20, 30}

これで3つの整数を持つスライスが作れます。

また、make関数を使って空のスライスを作ることもできます:


s := make([]int, 3)  // 長さ3のスライスを作成(初期値は0)

make関数は「空の箱を作る」イメージで、ここでは3個分の箱ができます。

3. スライスの要素にアクセスする

3. スライスの要素にアクセスする
3. スライスの要素にアクセスする

スライスも配列と同じように添字(インデックス)でアクセスします。添字は0から始まります。


fmt.Println(s[0])  // 10
s[1] = 50          // 2番目の値を50に変更
fmt.Println(s[1])  // 50

範囲外の添字を使うとエラーになるので注意しましょう。

4. スライスの長さと容量

4. スライスの長さと容量
4. スライスの長さと容量

len(s)でスライスの長さ(要素数)がわかります。


fmt.Println(len(s))  // 3

さらにcap(s)はスライスの容量を示し、今割り当てられている最大要素数を表します。

容量はスライスのサイズを増やすときの目安になる数です。

5. append関数で要素を追加する

5. append関数で要素を追加する
5. append関数で要素を追加する

スライスの一番大きな特徴は、append関数で簡単に要素を追加できることです。


s = append(s, 40)  // 40を追加
fmt.Println(s)     // [10 50 30 40]

追加したい要素をappendの引数に書くだけで、スライスが自動で拡張されます。

6. スライスの部分取り出し(スライスリテラル)

6. スライスの部分取り出し(スライスリテラル)
6. スライスの部分取り出し(スライスリテラル)

スライスは配列や他のスライスの一部を取り出すことができます。これを「スライス操作」と言います。


a := []int{1, 2, 3, 4, 5}
b := a[1:4]  // 2番目から4番目の要素を取り出す
fmt.Println(b)  // [2 3 4]

添字の書き方は[開始位置:終了位置]で、開始位置は含み、終了位置は含みません。

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

7. 配列とスライスの違い
7. 配列とスライスの違い
  • 配列はサイズが決まっていて変更できない
  • スライスは動的にサイズが変えられる
  • スライスは配列の一部を扱うこともできる
  • ほとんどのGoプログラムではスライスがよく使われる

スライスを覚えるとGo言語でのデータ管理がとても楽になります。

8. スライスのコピーと参照

8. スライスのコピーと参照
8. スライスのコピーと参照

スライスは配列とは違い、中のデータへの参照(ポインタ)を持っています。

そのため、別の変数に代入しても、元のスライスと同じデータを指しています。


a := []int{1, 2, 3}
b := a
b[0] = 100
fmt.Println(a)  // [100 2 3]

この特徴は便利ですが、意図しない影響を避けるために気をつけましょう。

9. スライスを使うシーン

9. スライスを使うシーン
9. スライスを使うシーン

スライスはサイズが変わるデータを扱いたいときに便利です。例えば、ユーザーからの入力リストやファイルの行データを扱うときに使われます。

Go言語でプログラムを書くなら、配列よりもスライスのほうがよく使われますので、しっかり理解しておきましょう。

Go言語を基礎からスッキリ学びたい人や、 文法だけでなく「実用的な使い方」まで押さえたい人には、 定番の入門書がこちらです。

基礎からわかるGo言語をAmazonで見る

※ Amazon広告リンク

まとめ

まとめ
まとめ

Go言語のスライスは、配列より柔軟にデータを扱える非常に便利な仕組みであり、多くのプログラムで中心的に使われます。配列との大きな違いは「サイズが変えられる」という点であり、この特徴だけでもスライスを使う価値があります。さらに、スライスは背後で配列を参照しているため、データ構造の動き方を理解すれば、どのような場面で最適に使えるかが見えてきます。今回の記事で、定義の仕方・初期化・要素追加・部分取り出し・容量や長さの概念など、スライスを活用するために必要な重要ポイントを順番に学ぶことができました。とくに append 関数を用いてスライスを拡張できる機能は、Go言語ならではの強力な仕組みで、多くの実用的な場面で役立ちます。

また、スライスには参照としての性質があり、別の変数に代入すると同じデータを共有するという重要な特徴があります。この性質を理解しておくことで、意図しない変更が起きたときに何が原因なのかをすぐに把握でき、より安全で整ったコードを書くことができます。とくに複雑なデータ構造を扱うときや、大量のデータを処理するときには、この動作が性能面にも影響するため、スライスの内部構造を意識することが大切です。

スライスは柔軟で扱いやすい反面、配列と違い容量と長さが異なることがあるため、そこを理解して使いこなすことで、Go言語でのデータ処理がより直感的でスムーズになっていきます。以下に総まとめとして、スライスの特徴を踏まえた簡単なサンプルコードを紹介します。スライスの基本動作を復習しつつ、実際にどのように使われるのかをイメージしてみてください。

スライスの総まとめサンプルコード


package main

import "fmt"

func main() {
    nums := []int{1, 2, 3}
    fmt.Println("初期スライス:", nums)

    nums = append(nums, 4, 5)
    fmt.Println("append後:", nums)

    part := nums[1:4]
    fmt.Println("部分スライス:", part)

    fmt.Println("長さ:", len(nums))
    fmt.Println("容量:", cap(nums))
}

このコードでは、スライスの作成・要素の追加・部分取り出し・長さと容量の確認といった基本要素をひととおり体験できます。スライスは Go プログラム全般で活躍するため、しっかり基礎を固めて活用できるようにしておきましょう。慣れてくると、配列よりもはるかに扱いやすく、より自然に使いこなせるようになります。

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

生徒

「先生、最初は配列とスライスの違いがよくわからなかったんですが、使ってみるとスライスって本当に便利ですね!」

先生

「そうでしょう。特に append や部分取り出しの仕組みを知ると、スライスが柔軟に使える理由がよく分かりますよね。」

生徒

「はい!容量と長さが違う理由も理解できました。参照としてデータを共有しているっていう仕組みも納得です。」

先生

「その調子です。スライスは Go 言語で最もよく使うデータ構造なので、しっかり使いこなせるようになるといろいろなプログラムが書けるようになりますよ。」

生徒

「これからもっと練習して、スライスを自然に使えるようになりたいです!」

関連セミナーのご案内

【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導

「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。

本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。

具体的な開発内容と環境

【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。

【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。

この60分で得られる3つの理解

1. 環境構築の完全な理解

「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。

2. Go言語の基本構造(変数・型)

データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。

3. 読みやすいコードの書き方

ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。

※本講座は、将来的にバックエンドエンジニアクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。

セミナー画像

初めてのGo言語を一緒に学びましょう!

関連記事:
カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のwhile的なforループの使い方!条件式ループの基本を解説
New2
Go言語
Go言語プログラムの実行方法まとめ!VSCode・ターミナルでの実行手順を解説
New3
Swift
Swift意味とは?プログラミング言語・金融・鳥の違いを徹底解説
New4
Swift
Swift 戻り値の扱い方と複数戻り値の返し方|初心者でも分かる関数の基本
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
No.2
Java&Spring記事人気No2
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.6
Java&Spring記事人気No6
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.7
Java&Spring記事人気No7
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.8
Java&Spring記事人気No8
Kotlin
Kotlinのログ出力方法を完全ガイド!LogcatとTimberでトラブルシューティング