1. 4つのゼロ値がそろっている
  2. append すると nil ではなくなる
コース一覧
Go道場 fleamaをGoで作り直す10問
問1 ゼロ値を予言せよ

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分

問1 ゼロ値を予言せよ

初段 / 目安 15分

TypeScript道場を突破したあなたに、凛さんからメッセージが届きました。

「fleama、アクセス増で Node版 API が悲鳴を上げています。Goリプレイス計画、始動します。リードは私。実装は——あなたにお願いします。ルールは前と同じ。私の CI が通らないコードはマージしません」

最初の課題は、書く前に考える課題です。

「宣言だけして初期化していない変数たち。それぞれ何が入っているか、実行する前に予言を書いてから、コードで確かめてください。Go では『分からない』は存在しません」

Go では、var で宣言しただけの変数にも必ず値が入ります。これをゼロ値と呼びます。JavaScript の undefined のような「まだ何も無い状態」は存在しません。型が決まれば、初期値も決まります。

数値は 0、文字列は空、真偽値は false です。ここまでは素直です。少し違うのがスライスで、こちらのゼロ値は nil になります。ただし nil のスライスでも len は取れて 0 を返しますし、append もそのまま使えます。空だが壊れてはいないという状態です。

完成条件

初期化していない変数の中身を組み立てて返す関数 predictZero を作ってください。

var で int string bool []string の4つを宣言し、その値から次の形の1行を作ります。引数の addOne が true のときだけ、スライスに1件だけ append してから調べます(nil でなくなることを確かめるためです)。

プレーンテキスト

int=0 string=空 bool=false slice=nil(len 0)

文字列のゼロ値は見えないので、空だったときは 空 という字に置き換えて出してください。スライスは nil と等しいかどうかで nil か あり を出し分け、そのあとに (len 0) の形で長さを添えます。

数値と真偽値と長さを文字に直すところは strconv が使えます。

要件

  1. var で int string bool []string の4つを宣言する(代入はしない)
  2. 文字列が空のときは 空 に置き換えて出す
  3. スライスは nil と等しければ nil、そうでなければ あり を出し、(len 長さ) を添える

入出力例

predictZero(false) → "int=0 string=空 bool=false slice=nil(len 0)" predictZero(true) → "int=0 string=空 bool=false slice=あり(len 1)"

ヒント

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

まず予言を書いてから確かめます。数値と文字列と真偽値は素直ですが、スライスだけ少し違います

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

関連レッスン

  • 問2 errを無視するな

    価格の文字列を数値に変換し、失敗したときの応答を自分で決めます。

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

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

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

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

  • 問5 スライスを育てよ

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

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

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

  • TypeScript静的型を加えた JavaScript の上位互換
  • エンドポイント「この URL を叩くとこの機能が動く」入口の住所
  • APIアプリ間でデータをやり取りする窓口
  • マージブランチを統合する操作。
  • 変数データに名前をつけて参照する仕組み
  • JavaScriptWeb で動的な振る舞いを担う言語
  • スライス範囲指定で部分列を取り出す記法
  • 関数処理に名前を付けて再利用できる単位
main.go
学習モード
エディタを読み込んでいます

メモ

問1 ゼロ値を予言せよ

⌘S で保存