1. 正しい価格
  2. 読めない文字列。err を捨てるとここで落ちる
  3. 空文字も読めない
  4. 0 は出品できない
  5. 負の数も出品できない
コース一覧
Go道場 fleamaをGoで作り直す10問
問2 errを無視するな

Go道場 fleamaをGoで作り直す10問

Go入門で身に付けた技を、商店街公式フリマアプリ「fleama」の Goリプレイス計画で試す演習専用コースです。解説はありません。依頼と完成条件だけを読み、白紙から自分で組み立てます。手が止まったときのために、方針・使う構文・部分解の3段階のヒントを各問に用意しています。ゼロ値の予言から始まり、error の受け止め方、for だけのループ、switch と定数、スライスとマップ、構造体とメソッド、ゴルーチンでの並行処理、JSON を返すハンドラを経て、最後は一覧・詳細・出品の3エンドポイントを Node版と互換になるよう組み上げるところまで、10問で Go の主要な道具を一巡します。1問15分から45分、全10問で約5時間です。Go入門を終えて「読めるけれど自分では書けない」と感じている方に向いています。

1
Goリプレイス計画
01. 問1 ゼロ値を予言せよ15分
02. 問2 errを無視するな20分
03. 問3 forしかない世界で集計せよ20分
04. 問4 商品状態で出し分けろ20分
05. 問5 スライスを育てよ25分
06. 問6 マップで在庫台帳25分
07. 問7 Itemに魂を込めよ30分
08. 問8 3本同時に走らせろ35分
09. 問9 JSONで応答せよ35分
10. 問10 総合 リプレイス完遂45分

問2 errを無視するな

初段 / 目安 20分

凛さんが次の依頼を持ってきました。

「価格の文字列を数値に変換する処理、書いてください。……先に言っておきます。戻り値の err を _ で捨てたコードは、その場でリジェクトします」

Go の関数は、値を2つ返せます。この仕組みがいちばん効いてくるのが、失敗しうる処理です。

Go

n, err := strconv.Atoi("4800")

左が結果、右がエラーです。成功していれば err は nil になり、失敗していれば理由の入った値が返ります。返ってきた err を見るまで、結果を信じてはいけません。

ここで手を抜くと何が起きるか、実際に見ておいてください。strconv.Atoi("たぶん5000") は失敗しますが、そのとき1つ目の戻り値は 0 です。err を _ で捨てると、変換できなかったことに気付かないまま 0 を掴みます。fleama なら、0円の商品が出品されることになります。

ですから書き方は必ずこの形になります。

Go

n, err := strconv.Atoi(s) if err != nil { // 失敗したときにどうするかを、自分で決める }

凛さんが「捨てるな」と言うのは、行儀の話ではありません。捨てると嘘の値が下流へ流れるからです。

完成条件

価格の文字列を受け取り、表示用の1行を返す関数 parsePrice を作ってください。

変換できたときは 4800円 の形で返します。変換できなかったときは 価格が読めません を返してください。

変換できたとしても、0 以下だったときは 価格は1円以上です を返します。

err を捨てた実装では、不正な文字列のときに 0円 を返してしまい、テストが通りません。

要件

  1. strconv.Atoi の戻り値を 値, err の2つで受け取り、err を確かめる
  2. 変換できなければ 価格が読めません を返す
  3. 変換できても 0 以下なら 価格は1円以上です、そうでなければ <数値>円 を返す

入出力例

parsePrice("4800") → "4800円" parsePrice("たぶん5000") → "価格が読めません" parsePrice("") → "価格が読めません" parsePrice("0") → "価格は1円以上です" parsePrice("-100") → "価格は1円以上です"

ヒント

前のヒントを開くと次が開きます。開かずに解けると未開封クリアです

初期コードは `err` を `_` で捨てています。まずそこを名前のある変数で受け取ります

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

関連レッスン

  • 問3 forしかない世界で集計せよ

    回数・条件・range の3種類の繰り返しを、すべて for で書き分けます。

  • 問4 商品状態で出し分けろ

    定数にした商品状態を switch で出し分け、未知の値も取りこぼしません。

  • 問5 スライスを育てよ

    空のスライスから始めて、追加と件数と番号つき一覧を組み立てます。

  • 問6 マップで在庫台帳

    カンマokイディオムで、存在しないカテゴリを聞かれても事故らない台帳にします。

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

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

  • 処理計算や代入を表す長方形
  • 戻り値呼び出し元への返答を表す点線矢印
  • 関数処理に名前を付けて再利用できる単位
  • テストバグを見つける工程
main.go
学習モード
エディタを読み込んでいます

メモ

問2 errを無視するな

⌘S で保存