0Pricing
Go Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Printfの動詞
  2. SprintfとFprintf
  3. Stringerインターフェース
  4. 入力のスキャン
← Go Academyに戻る