本文へスキップ
BecomeCoder

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

スライス ― 伸び縮みする並び

ブラウザで完結

導入

同じ型の値を順番に並べて持つのが スライス(slice) です。Go で「リスト」といえばほぼこれ。要素を後から追加できます。

説明

package main

import "fmt"

func main() {
    nums := []int{10, 20, 30}

    fmt.Println(nums)        // [10 20 30]
    fmt.Println(nums[0])     // 10(先頭は 0 番目)
    fmt.Println(len(nums))   // 3(要素数)

    nums = append(nums, 40)  // 末尾に追加
    fmt.Println(nums)        // [10 20 30 40]
}
  • []int{...}int のスライスを作るリテラル。[] の中は空にします(数を書くと固定長の「配列」になります)。
  • nums[0] … 添字でのアクセス。先頭は 0
  • len(nums) … 要素数を返す組み込み関数
  • append(nums, 40) … 末尾に要素を足した新しいスライスを返す関数。戻り値を nums に代入し直すのが定石です。

存在しない添字(nums[10] など)にアクセスすると、実行時に panic(パニック、異常終了)になります。len で範囲を確かめてから使いましょう。

やってみよう

nums = append(nums, 40)nums = を忘れて append(nums, 40) だけにすると、追加結果が捨てられて nums は変わりません。append は「戻り値を受け取る」ところがポイントです。

実際に動かしてみよう

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

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

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