SprintfとFprintf
文字列やwriterに書式付き出力を行います
「SprintfとFprintf」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
Printfファミリー
fmtパッケージには、次の3つの整形用関数があります。
Printfは標準出力に書き込みます。Sprintfは整形した文字列を返します。Fprintfは任意のwriterに書き込みます。
package main
import "fmt"
func main() {
fmt.Printf("hello %s\n", "world")
}Sprintfは文字列を返す
fmt.SprintfはPrintfとまったく同じように整形しますが、出力する代わりに結果を文字列として返します。返された文字列は保存したり再利用したりできます。
package main
import "fmt"
func main() {
msg := fmt.Sprintf("%s scored %d", "Bob", 95)
fmt.Println(msg)
}識別子を組み立てる
Sprintfは、複数の要素からキー、ファイル名、ラベルなどを組み立てるときに便利です。
package main
import "fmt"
func main() {
id := fmt.Sprintf("user-%04d", 42)
fmt.Println(id)
}数値をテキストに整形する
Sprintfを使うと、数値を通貨のような見やすく整形された文字列に変換できます。
package main
import "fmt"
func main() {
label := fmt.Sprintf("Price: $%.2f", 7.5)
fmt.Println(label)
}Fprintfはwriterに書き込む
fmt.Fprintfは最初の引数としてio.Writerを受け取り、そこに整形した内容を書き込みます。os.Stdoutはそのようなwriterの1つです。
package main
import (
"fmt"
"os"
)
func main() {
fmt.Fprintf(os.Stdout, "to stdout: %d\n", 1)
}標準エラー出力に書き込む
診断情報をFprintfでos.Stderrに送ると、通常の出力と分離できます。
package main
import (
"fmt"
"os"
)
func main() {
fmt.Fprintf(os.Stderr, "warning: %s\n", "low disk")
}BuilderにFprintfする
strings.Builderもio.Writerなので、そこへ直接整形して書き込み、最後に文字列を取得できます。
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
fmt.Fprintf(&b, "%s=%d;", "x", 10)
fmt.Fprintf(&b, "%s=%d", "y", 20)
fmt.Println(b.String())
}bytes.BufferにFprintfする
bytes.Bufferもよく使われる書き込み先です。内容を組み立ててから、文字列に変換します。
package main
import (
"bytes"
"fmt"
)
func main() {
var buf bytes.Buffer
fmt.Fprintf(&buf, "row %d\n", 1)
fmt.Fprintf(&buf, "row %d\n", 2)
fmt.Print(buf.String())
}fなしのSprintとFprint
fが付くバージョンはフォーマット文字列を受け取ります。fを外したSprint/Fprintは、デフォルトの形式で引数を単純に連結します。
package main
import "fmt"
func main() {
s := fmt.Sprint("a", 1, true)
fmt.Println(s)
}Sprintlnは空白を追加する
fmt.Sprintlnは引数を空白で連結し、改行を追加して、その文字列を返します。
package main
import "fmt"
func main() {
s := fmt.Sprintln("x", 1, "y", 2)
fmt.Print(s)
}適切な関数を選ぶ
出力先に応じて選択します。
- 文字列が必要ですか。
Sprintfを使います。 - 標準出力に書き込みますか。
Printfを使います。 - ファイル、バッファ、エラーストリームに書き込みますか。
Fprintfを使います。
package main
import (
"fmt"
"os"
)
func main() {
s := fmt.Sprintf("count=%d", 3)
fmt.Fprintf(os.Stdout, "%s\n", s)
}確認問題
出力する代わりに整形したテキストを返す関数はどれですか。
まとめ:SprintfとFprintf
整形用関数のファミリーについて学びました。
Sprintfは文字列を返します。Fprintfは任意のio.Writer(標準出力、標準エラー出力、バッファ、ビルダー)に書き込みます。fのないバージョンはデフォルトの形式を使用します。
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
fmt.Fprintf(&b, "result=%s", fmt.Sprintf("%d%%", 80))
fmt.Println(b.String())
}よくある質問
「SprintfとFprintf」レッスンは無料ですか?
はい。「SprintfとFprintf」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「SprintfとFprintf」で何を学びますか?
文字列やwriterに書式付き出力を行います ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「SprintfとFprintf」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Printfの動詞
- SprintfとFprintf
- Stringerインターフェース
- 入力のスキャン