コース一覧
    Go基礎:データ構造
    つくる: Itemで再設計

    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分

    つくる: Itemで再設計

    第5章のコードを書き換える

    第5章のつくる回で書いた検索と集計を、Item を使う形に作り直します。新しい知識は出てきません。

    第5章の関数はこうでした。

    Go

    func searchSummary(names []string, prices []int, categories []string, keyword string) string

    並びが3つ並んでいます。同じ添字が同じ商品を指すという約束が、コードのどこにも書かれていません。

    Item にまとめると、こうなります。

    Go

    func searchSummary(items []Item, keyword string) string

    これがリファクタリングです。 動きは変えず、形だけを良くします。答えが同じであることを、テストが保証してくれます。

    メソッドに寄せる

    判定や計算を Item のメソッドにすると、集計の側が読みやすくなります。

    Go

    func (i Item) Matches(keyword string) bool {
    	return keyword == "" || i.Name == keyword
    }

    呼ぶ側はこうなります。

    Go

    if !item.Matches(keyword) {
    	continue
    }

    条件の中身が名前になったぶん、何をしているのか一目で分かります。

    || は「または」です。片方が真なら真になります。キーワードが空、または名前が一致、という条件をそのまま書けます。

    何をメソッドにするか

    プレーンテキスト

    その型のデータだけで判断できる  → メソッドにできる
    外の情報が要る                 → 関数のまま

    Matches は Item の名前とキーワードだけで判断できるので、メソッド向きです。一方「一覧の中で最高額か」は他の商品を知る必要があるので、メソッドにはできません。

    順番に作る

    プレーンテキスト

    1. Item に Matches メソッドを付ける
    2. 引数を []Item に変える
    3. 集計を item.Price で書き直す
    4. 該当0件のときを分ける

    この演習では、呼び出し側が並びを渡してくるので、関数の中でまず []Item を組み立ててから処理してください。

    要件

    1. Item に Matches(keyword string) bool メソッドを付ける
    2. キーワードが空文字のときは常に true を返す
    3. Matches を使って絞り込む
    4. 該当N件 合計M円 平均K円 の形を返す
    5. 該当が0件なら 該当なし を返す

    ヒント

    `func (i Item) Matches(keyword string) bool {` の形でメソッドを足します

    中身は `return keyword == "" || i.Name == keyword` の1行で書けます

    絞り込みは `if !item.Matches(keyword) { continue }` です。感嘆符の付け忘れに注意してください

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

    関連レッスン

    • 第6章クイズ

      構造体、メソッド、ポインタレシーバ、New関数についての理解を確認します。

    • 構造体のスライス

      []Itemで一覧を持ち、全データを構造体前提に移行できるようになります。

    • New関数の慣習

      検証つきの生成関数を書き、不正な商品を作れなくできるようになります。

    • ポインタレシーバ

      値レシーバとの違いを実験で確かめ、変更が呼び出し元に効く理由を説明できます。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 関数処理に名前を付けて再利用できる単位
    • テストバグを見つける工程
    • メソッドクラスに属する関数
    • 判断YES/NO 分岐を表す菱形
    • 処理計算や代入を表す長方形
    main.go
    エディタを読み込んでいます

    メモ

    つくる: Itemで再設計

    ⌘S で保存