コース一覧
    Go基礎:データ構造
    rangeで走査する

    Go基礎:データ構造

    Goのスライス、マップ、構造体、メソッドを使ったデータ表現を学ぶコースです。

    1
    スライスとマップ
    01. 配列15分
    02. スライス15分
    03. appendで育てる15分
    04. rangeで走査する15分
    05. マップ15分
    06. カンマokイディオム15分
    07. つくる: 検索と集計20分
    08. 第5章クイズ10分
    2
    構造体とメソッド
    01. 構造体15分
    02. 初期化とフィールド15分
    03. メソッド15分
    04. ポインタレシーバ20分
    05. New関数の慣習15分
    06. 構造体のスライス15分
    07. つくる: Itemで再設計20分
    08. 第6章クイズ10分

    rangeで走査する

    添字と値を同時に受け取る

    Go

    for i, price := range prices {
    	fmt.Println(i, price)
    }

    1つ目が添字、2つ目が値です。ここまで書いてきた形と比べます。

    Go

    for i := 0; i < len(prices); i++ {
    	price := prices[i]
    }
    
    for i, price := range prices {   // 同じこと
    }

    短いだけではありません。範囲を超える書き間違いが起こりえません。 i <= len(prices) と書いて止まる事故が、この形なら発生しません。

    実際の Go のコードでは、並びを回すときほぼ range を使います。

    片方だけ要るとき

    値だけでよいなら、添字を _ にします。

    Go

    for _, price := range prices {
    	total += price
    }

    添字だけでよいなら、値を書かずに済みます。

    Go

    for i := range prices {
    	fmt.Println(i)
    }

    2つ目を省略できるのは、要らないものを書かせないためです。_ すら書かなくてよくなります。

    値はコピーである

    ここが唯一の落とし穴です。range が渡してくるのは値のコピーです。

    Go

    for _, price := range prices {
    	price = 0        // コピーを変えただけ
    }
    fmt.Println(prices)   // 元のまま

    書き換えたいなら、添字を使います。

    Go

    for i := range prices {
    	prices[i] = 0    // これなら効く
    }

    第6章で構造体を扱うようになると、この違いが効いてきます。「range で回して中身を書き換えたのに反映されない」は定番の詰まりどころです。

    文字列にも使える

    Go

    for i, r := range "きのこ" {
    	fmt.Println(i, string(r))
    }

    プレーンテキスト

    0 き
    3 の
    6 こ

    添字が 0・3・6 と飛んでいます。日本語の1文字が3バイトを使うためです。range は文字の単位で回してくれるので、日本語を1文字ずつ扱うときはこの形が安全です。

    添字で s[0] のように取り出すと、バイト単位になって文字が壊れます。日本語を扱うときに覚えておく価値のある違いです。

    要件

    1. for i, name := range names の形で回す
    2. 番号は1から始める
    3. N. 商品名 価格円 の形で1行ずつ並べる
    4. 行の区切りは \n。最後に余分な改行を付けない

    ヒント

    `for i, name := range names {` と書くと、添字と商品名を同時に受け取れます

    価格は `prices[i]` で取り出します。2つの並びは同じ添字で対応しています

    初期コードは末尾に改行が残る形です。行の後ろではなく前に `\n` を足すと直ります

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/10

    関連レッスン

    • マップ

      キーと値の組で持つマップを使い、カテゴリごとの件数を集計できるようになります。

    • カンマokイディオム

      キーの有無を2つ目の戻り値で判定し、無いキーを安全に扱えるようになります。

    • つくる: 検索と集計

      第5章の知識でキーワード検索とカテゴリ集計を同時に行えるようになります。

    • 第5章クイズ

      配列とスライスの違い、append、range、マップ、カンマokについての理解を確認します。

    main.go
    エディタを読み込んでいます

    メモ

    rangeで走査する

    ⌘S で保存