本文へスキップ
BecomeCoder

Goコース · 第2章 制御構文 · レッスン7

コレクションを回す ― range

ブラウザで完結

導入

スライス(次章で学ぶ「並び」)や文字列を先頭から順に処理したいとき、for range を使うと添字を自分で管理せずに回せます。

説明

package main

import "fmt"

func main() {
    fruits := []string{"りんご", "みかん", "ぶどう"}

    for i, name := range fruits {
        fmt.Printf("%d番目: %s\n", i, name)
    }
}
  • range fruits は、要素を1つずつ取り出しながら「添字, 値」の2つを返します。
  • 添字が要らないときは _(アンダースコア)で受け取って捨てます:for _, name := range fruits
  • 値が要らず添字だけ欲しいときは for i := range fruits と書けます。

実行結果:

0番目: りんご
1番目: みかん
2番目: ぶどう

Go では「使わない変数」を残すとエラーになるため、_ で明示的に捨てる書き方が頻繁に登場します。

やってみよう

for i, name := range fruitsi を使わずに残すと、「i を宣言したのに使っていない」というエラーになります。添字が不要なら for _, name := range fruits に直します。

実際に動かしてみよう

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

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

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