本文へスキップ
BecomeCoder

Goコース · 第3章 配列・スライス・マップ · レッスン10

スライスの一部を切り出す ― スライス式

ブラウザで完結

導入

スライスは「ここからここまで」と範囲を指定して、一部だけを取り出せます。この操作が名前(slice = 薄切り)の由来です。

説明

package main

import "fmt"

func main() {
    letters := []string{"a", "b", "c", "d", "e"}

    fmt.Println(letters[1:3])  // [b c] (1番目から3番目の手前まで)
    fmt.Println(letters[:2])   // [a b] (先頭から2番目の手前まで)
    fmt.Println(letters[3:])   // [d e] (3番目から最後まで)
}
  • letters[1:3] … 添字 1 以上 3 未満 を取り出す。「終わりの添字は含まない」のがルールです。
  • [:2] は先頭からを省略、[3:] は末尾までを省略した書き方です。

「開始は含み、終了は含まない」(半開区間)は Go に限らず多くの言語で共通の約束です。要素数は「終了 − 開始」でちょうど計算できる、と覚えると間違えません(3 - 1 = 2 個)。

やってみよう

letters[1:3] が2個(b, c)なのに対し、letters[1:4] は3個(b, c, d)です。「終わりの添字は含まない」ことを、色々な範囲で確かめてみましょう。

実際に動かしてみよう

下のエディタにGoを書いて「実行」を押すと、学習用シミュレータが fmt の出力を表示します(本物のGoコンパイラではなく、教材の範囲を再現した軽量エンジンです)。スライス・マップ・構造体・インターフェース・goroutine/channel なども動きます。本文の例を書き換えて動かしてみましょう(並行処理の実行順は決定的に再現しているため、本物のインターリーブとは異なる場合があります)。

Go — ブラウザ内で実行(学習用シミュレータ)

Goの教材サブセットを動かす学習用シミュレータを読み込みます(本物のGoコンパイラではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。