Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
生徒
「Go言語で文字列と数値を組み合わせて出力したいときはどうすればいいですか?」
先生
「その場合はfmt.Sprintfを使うと便利です。文字列の中に数値や他の変数を埋め込むことができます。」
生徒
「具体的にはどのように書くのですか?」
先生
「文字列の中に%dや%sなどの書式指定子を使って変数を埋め込みます。それでは基本的な使い方を見てみましょう!」
1. fmt.Sprintfとは?
Go言語のfmt.Sprintfは、文字列をフォーマットして新しい文字列を作るための関数です。普段のprint関数と違い、その場で表示するのではなく「文字列として結果を返す」のが特徴です。Sprintfの「S」はStringの頭文字で、生成した文章をそのまま変数に入れて後で使うことができます。
たとえば、画面に出す前にメッセージを組み立てたいときや、ログとして保存したいときに役立ちます。「名前」や「数値」を文章の中に自然に埋め込めるので、初心者の人でも読みやすいメッセージを簡単に作れます。
package main
import (
"fmt"
)
func main() {
user := "太郎"
msg := fmt.Sprintf("%sさん、ようこそ!", user)
fmt.Println(msg)
}
太郎さん、ようこそ!
このように、作成した文字列は変数msgに入っているので、後から記録したり別の処理に渡したりできます。単に画面に表示するだけでなく、自由な場面で活用できるのがfmt.Sprintfの便利なポイントです。
2. 基本的な使い方
まずは、変数を文章の中に埋め込む簡単な例を見てみましょう。たとえば、名前と年齢をひとつの文章として表示したいとき、文字列をそのまま結合しようとすると「+」を使ったり、スペースを自分で入れたりと少し面倒です。そこでfmt.Sprintfを使うと、自然な文章の形で文字列を作ることができます。
package main
import (
"fmt"
)
func main() {
name := "太郎"
age := 25
result := fmt.Sprintf("私の名前は%sで、年齢は%d歳です。", name, age)
fmt.Println(result)
}
私の名前は太郎で、年齢は25歳です。
ここで使っている%sは「文字列を入れる場所」、%dは「整数を入れる場所」を表しています。このように書式指定子と変数を並べてあげるだけで、きれいな文章が作れます。文字列をつなげるより読みやすく、プログラムを見た人にも意図が伝わりやすくなるので、初心者の方にもおすすめです。
生徒
「確かに “+” でつなげるよりずっと読みやすいですね。でも、どうしてわざわざ書式指定子を使うんですか?」
先生
「いい質問ですね。例えば、年齢のあとに “歳” と書き忘れたり、順番を間違えたりすることがなくなるんです。文章の形を先に作っておいて、あとから変数を埋め込むだけなので、コードもスッキリします。」
生徒
「なるほど。文章として先に書けるから、どんな内容になるか想像しやすいんですね!」
3. 小数点や浮動小数点数のフォーマット
小数点を含む数値を文字列として整形したい場合は、%fを使います。小数点以下の桁数も指定可能です。
package main
import (
"fmt"
)
func main() {
price := 1234.567
result := fmt.Sprintf("商品の価格は%.2f円です。", price) // 小数点以下2桁
fmt.Println(result)
}
商品の価格は1234.57円です。
このように、小数点以下を指定したフォーマットで表示することができます。
4. 複数の変数を組み合わせる
複数の数値や文字列を同時にフォーマットしたい場合もfmt.Sprintfは便利です。順番に書式指定子を並べるだけで簡単に文字列化できます。
package main
import (
"fmt"
)
func main() {
name := "花子"
age := 30
height := 165.5
result := fmt.Sprintf("%sさんは%d歳で身長は%.1fcmです。", name, age, height)
fmt.Println(result)
}
花子さんは30歳で身長は165.5cmです。
文字列、整数、浮動小数点数を組み合わせる場合も、書式指定子と変数の順番を揃えることで簡単に整形できます。
5. fmt.Sprintfを使うときの注意点
書式指定子と変数の型が一致していないとエラーになります。例えば、%dは整数用なので文字列を渡すと実行時にエラーになります。必ず対応する型の書式指定子を使うようにしましょう。
また、Sprintfは文字列を返すだけで画面には表示しません。表示したい場合はfmt.Printlnやfmt.Printと組み合わせて使用します。
この関数を使いこなすと、ユーザー向けのメッセージやログ出力を見やすく整形することができます。
6. 文字列フォーマットの活用例
たとえば、日付や通貨、割合などを整形して表示したい場合にfmt.Sprintfは非常に便利です。固定幅で揃えたいときや、小数点以下を調整したいときに活用できます。これにより、見やすく読みやすい出力が簡単に作れます。
まとめ
Go言語でプログラムを書いていると、人間が読みやすいメッセージを出したい場面がたくさんあります。数字だけ並べても伝わりにくかったり、ログに残したい文章が長くて書きにくかったり、途中で修正したくなって書き直しが大変だったりします。そんなときに力を発揮してくれるのがfmt.Sprintfです。文字列を繋げるのではなく、文章の形を先に作り、そこへ値を埋め込む書き方は、読みやすさと管理しやすさの両方を助けてくれます。
書式指定子を使うことで、名前や年齢のようなシンプルなデータはもちろん、金額や身長、商品価格、割合、日付といったさまざまな種類の値を綺麗に整形できます。単位を付けたり桁数を揃えたり、ゼロで埋めたりすることで、画面に表示する文章がぐっと洗練され、ユーザーにとって読みやすい表示へと変わります。小さな工夫ですが、丁寧に整った出力はアプリケーション全体の印象にも影響します。
また、fmt.Sprintfは文字列として作成した結果をそのまま変数に入れられるため、後からファイルに書き込んだり、ログに残したりする処理へ渡せる点も便利です。見た目を整えるだけでなく、プログラムの構造そのものがすっきりします。画面への出力とは別の場所に文字列を使い回すことができるので、再利用性の高いコードを目指すときにも役立ちます。
まとめとしてのサンプルプログラム
最後に、さまざまな書式指定子を組み合わせて、見やすい文章を作る例をもうひとつ見ておきましょう。「日付」「価格」「割引率」「商品名」をひとつの文章として整形し、後からログへ保存するイメージのサンプルです。
package main
import (
"fmt"
)
func main() {
product := "りんご"
price := 180.0
discount := 0.15
year := 2025
month := 7
day := 3
msg := fmt.Sprintf("%sの価格は%.2f円、割引率は%.1f%%です。販売日は%04d-%02d-%02dです。",
product, price, discount*100, year, month, day)
fmt.Println(msg)
}
りんごの価格は180.00円、割引率は15.0%です。販売日は2025-07-03です。
ひとつひとつの値を並べて出すだけでも動きますが、整えた形で表示するだけで、読み手の印象は大きく変わります。特に仕事で使うログや、利用者へ見せる画面は、数値をきちんと整形するかどうかで「丁寧に作られているか」が伝わります。こうした細かい作業は後回しにされることもありますが、一度書式を覚えると色々な画面や処理に応用できるため、覚えて損はありません。
今回学んだように、%sは文字列、%dは整数、%fは小数、そして小数点以下の桁数を指定したい場合は%.2fや%.1fのように書けます。日付には%04dや%02dなどのゼロ埋めを使えば、桁が揃って見た目も綺麗になります。この考え方を意識するだけで、まるで整った帳票やレポートのような出力を作ることができます。
書式指定子と変数の型が一致しているかどうか、出力したい桁数は正しいか、順番はあっているか。この三つを意識するだけで、失敗しないフォーマット操作ができます。エラーが出たときは、どの書式指定子を使ったのかを一度見直してみましょう。最初は少し難しく感じる部分ですが、慣れてくると無意識で使えるようになります。
そして何より、fmt.Sprintfは「使っただけ結果が目に見える」機能なので、試しながら覚えるのに向いています。変数の値を変えたり、桁数を変えたり、文章の形を変えたりと、いろいろ実験してみてください。自分なりに読みやすい形を作っていくことで、理解が自然と深まります。
生徒
「文字列をつなげるより、fmt.Sprintfで整形したほうがきれいになる理由が分かりました。小数の桁も揃えられるし、日付もゼロ埋めで綺麗に表示できますね。」
先生
「そのとおりです。読みやすい出力は、それだけでプログラムの質を高めます。%s%d%fの基本さえおさえれば、あとは応用するだけです。」
生徒
「ログや表示にも使えそうです。これからの課題でも試してみます!」
先生
「自分で触ってみるのが一番身につきます。ぜひ色々なパターンを作ってみてください。」