つくる: 起動バナー
章の知識だけで作る
新しいことは出てきません。第1章で使った fmt.Sprintf と if だけで、fleama-go の起動バナーを組み立てます。
完成すると、こういう表示になります。
プレーンテキスト
=== fleama-go ===
version 1.0.0
商品 42 件を読み込みました複数行を1つの文字列にする
画面に3回出力するのではなく、3行分をまとめた1つの文字列を作ります。行の区切りは \n です。
Go
s := "1行目\n2行目"これを表示すると2行に見えます。文字列の中の \n が「ここで改行」という印だからです。
Sprintf の型紙にもそのまま書けます。
Go
fmt.Sprintf("=== %s ===\nversion %s", name, version)数によって言葉を変える
最後の行は、読み込んだ件数で表現を変えます。
プレーンテキスト
42 件のとき 商品 42 件を読み込みました
0 件のとき 商品がまだありません0 のときだけ別の文にするので、if で分けます。第1章の最初にやったことと同じ形です。
Go
if count == 0 {
// 別の文を組み立てる
}組み立ての順序
一度に全部書こうとすると、どこが間違っているのか分からなくなります。順番に作ってください。
プレーンテキスト
1. 1行目だけ返す === fleama-go ===
2. 2行目を足す \nversion 1.0.0
3. 3行目を足す \n商品 42 件を読み込みました
4. 0 件のときを分ける各段階でテストを流すと、どこで崩れたかがすぐ分かります。まとめて書いてから直すより速く終わります。
要件
- 1行目は
===とアプリ名と===を並べた形にする - 2行目は
versionとバージョンを並べた形にする - 3行目は件数が1以上なら
商品 N 件を読み込みました - 件数が0のときの3行目は
商品がまだありません - 行の区切りは
\n。最後に余分な改行を付けない
入出力例
banner("fleama-go", "1.0.0", 42) → "=== fleama-go ===
version 1.0.0
商品 42 件を読み込みました"
banner("fleama-go", "1.0.0", 0) → "=== fleama-go ===
version 1.0.0
商品がまだありません"
banner("fleama-go", "0.9.1", 1) → "=== fleama-go ===
version 0.9.1
商品 1 件を読み込みました"
banner("shop", "2.3.4", 7) → "=== shop ===
version 2.3.4
商品 7 件を読み込みました"ヒント
編集 ゆめさく編集部