完成と次のステップ
作ったもの
66 レッスンで、fleama API の Go 版ができました。
プレーンテキスト
第1章 起動バナー
第2章 型を選んで商品を表す
第3章 条件付きの集計
第4章 エラーを返す関数群
第5章 検索と集計
第6章 Item 構造体への再設計
第7章 並行集計
第8章 JSON を返す API
第9章 仕様互換・差し替え・1バイナリでのデプロイ最初に書いたのは fmt.Sprintf の1行でした。いまは、仕様書のある API を別実装で置き換えられます。
Go の8つの特徴を、もう一度
設計の時点で「Goならでは」として選んだものが、全部出てきました。
プレーンテキスト
ゼロ値 第2章 未定義が無い
暗黙変換なし 第2章 型を混ぜない
for しかない 第3章 ループは1種類
複数戻り値 第4章 値と成否を一緒に返す
if err != nil 第4章 失敗を必ず受け取る
defer 第4章 後始末を予約する
ポインタレシーバ 第6章 書き換えを効かせる
ゴルーチン 第7章 go の1語で並行にどれも「機能を足す」方向ではなく、書き方を1つに絞る方向の選択です。Go を読んでいて驚きが少ないのは、この積み重ねによります。
次に進むなら
データベースをつなぐ。 このコースの商品データは、コードの中に書いてありました。実際には DB から取ります。database/sql が標準ライブラリにあります。SQL入門とDB設計入門をやっているなら、そのまま繋がります。
Docker で配る。 1バイナリは Docker と相性が抜群です。ビルドしたバイナリだけを詰めた、数MBのイメージが作れます。他の言語では数百MBになるところです。
テストを書く。 go test が標準で入っています。このコースでは httptest を使いましたが、あれはテストの道具そのものです。書き方はもう知っています。
実務のリプレイス案件へ。 第9章でやったことが、そのまま仕事になります。「動いている API を Go で書き直す」は、求人でよく見かける形です。
最後の演習
API のバージョン情報を返すエンドポイントを作ります。ここまでで覚えたことだけで書けます。
完成したら、fleama-go は本当に完成です。
要件
VersionResponseに name・version・endpoints の3つのフィールドを定義する- 構造体タグでキー名を小文字にする
- endpoints は4つのパスを指定の順で入れる
json.Marshalで変換してw.Writeで書く
入出力例
callVersion() → "{"name":"fleama-go","version":"1.0.0","endpoints":["/items","/items/{id}","/stats","/version"]}"ヒント
編集 ゆめさく編集部