本文へスキップ
BecomeCoder

Goコース · 第7章 パッケージと標準ライブラリ · レッスン26

fmt を使いこなす ― Println・Printf・Sprintf

ブラウザで完結

導入

fmt パッケージは、Go で最も頻繁に使うパッケージです。「画面に出す」「ログに残す」「メッセージ文字列を組み立てる」――そのどれもが fmt の役目です。書式指定(フォーマット動詞)を押さえて、思い通りの表示を作れるようになりましょう。

説明

package main

import "fmt"

func main() {
	name := "在庫管理システム"
	version := 2
	ready := true

	fmt.Println(name, version, ready)
	fmt.Printf("%s (v%d) 稼働中: %t\n", name, version, ready)
}
  • fmt.Println(...) … 値をスペース区切りで表示し、最後に改行する。手軽なデバッグ表示に向く。
  • fmt.Printf(書式, ...) … 書式(フォーマット文字列)の % 記号の場所に値を差し込む。改行は自分で \n を書く。

第1章で見た書式動詞を実務でよく使う順に振り返ります。

動詞意味
%d整数
%s文字列
%t真偽値
%vどんな型でも「よしなに」表示

Printf の仲間に、表示せず文字列として組み立てるだけSprintf もあります。

msg := fmt.Sprintf("状態レポート: %s (v%d)", name, version)
fmt.Println(msg)

エラーメッセージやログの文面を組み立てるときは、いきなり表示する Printf ではなく、いったん文字列にする Sprintf を使うのが定番です。組み立てた文字列を関数の戻り値にしたり、別の場所に渡したりできるからです。

やってみよう

Printf の書式文字列と、渡す値の個数と順番をそろえる感覚を確かめましょう。%s (v%d) 稼働中: %t の3つの動詞に対して、渡す値も3つ必要です。動詞を減らしたり増やしたりすると出力がどう崩れるか、試してみてください。

演習

商品名 item(文字列)・在庫数 stock(整数)・単価 price(整数)の3つの変数を使い、Printf で「item の在庫は stock 個、単価は price 円です」という1行を出力するコードを書いてください(item = "USBケーブル"stock = 48price = 980 とする)。

ヒント1を見る

書式文字列は "%s の在庫は %d 個、単価は %d 円です\n" のように、動詞の並びと値の並びを対応させます。

ヒント2を見る

fmt.Printf("%s の在庫は %d 個、単価は %d 円です\n", item, stock, price) の形で3つの値を順番どおり渡します。

実際に動かしてみよう

下のエディタにGoを書いて「実行」を押すと、学習用シミュレータが fmt の出力を表示します(本物のGoコンパイラではなく、教材の範囲を再現した軽量エンジンです)。スライス・マップ・構造体・インターフェース・goroutine/channel なども動きます。本文の例を書き換えて動かしてみましょう(並行処理の実行順は決定的に再現しているため、本物のインターリーブとは異なる場合があります)。

Go — ブラウザ内で実行(学習用シミュレータ)

Goの教材サブセットを動かす学習用シミュレータを読み込みます(本物のGoコンパイラではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。