メインコンテンツにスキップ
モジュール 1 · レッスン 5 / 5コース内の 5/50~10 min
モジュールのレッスン (5/5)

fmtによる入出力

標準ライブラリの fmt パッケージは、印刷用の主要なツールです。 コンソール、文字列のフォーマット、入力の読み取り。使用したことがある場合 C の printf は、くつろげるものですが、さらに洗練されています。 %v 動詞と %T 動詞のおかげで。

Print、Println、Printf: 3 つの関数、3 つの動作

Go
fmt.Print("ciao ", "mondo")    // "ciao mondo"  (niente newline finale)
fmt.Println("ciao", "mondo")   // "ciao mondo\n" (newline + spazi tra argomenti)
fmt.Printf("eta=%d\n", 36)     // "eta=36\n"    (format string esplicita)

いつも使う動詞

動詞印刷内容例
%v「デフォルト値」 — 任意のタイプで機能します。 {Ada 36}
%+v%v と似ていますが、フィールド名が構造体にあります。 {Name:Ada Age:36}
%#v値の「Go 構文」表現main.User{Name:"Ada", Age:36}
%T値の型float64
%d10 進数の整数42
%fフロート3.140000
%.2f小数点以下 2 桁の浮動小数点3.14
%s文字列Ada
%q「引用符で囲まれた」文字列 (引用符とエスケープを含む)"Ada\n"
%tブールtrue
%x16 進数 (小文字)2a
%bバイナリ101010
Go
u := struct{ Name string; Age int }{"Ada", 36}
fmt.Printf("%v\n", u)   // {Ada 36}
fmt.Printf("%+v\n", u)  // {Name:Ada Age:36}
fmt.Printf("%T\n", 3.14) // float64

Sprintf: 文字列を出力せずに構築する

Printf と同じインターフェイスですが、結果は string:

Go
msg := fmt.Sprintf("L'utente %s ha %d anni", "Ada", 36)
fmt.Println(msg) // L'utente Ada ha 36 anni

メッセージ、ログ、エラーを作成するために常に使用します。

Errorf: 文字列 + エラーの折り返し

fmt.Errorf は、Printf スタイルの書式設定を使用して error を作成します。と 特別な動詞 %w を使用すると、既存のエラーを ラップしてそのエラーを保持できます チェーン (これについてはインターフェイス モジュールで詳しく説明します):

Go
if _, err := os.Open("missing"); err != nil {
    return fmt.Errorf("apertura config: %w", err)
}

あなたの番です

運動#go.m1.l5.e1
試行回数: 0読み込み中…

fmt.Println を使用して文字列「ciao mondo」を出力します。

エディターを読み込み中…
ヒントを表示

`fmt.Println` は文字列を受け取り、改行そのものを追加します。

3 回の試行後に解決策が利用可能になります

運動#go.m1.l5.e2
試行回数: 0読み込み中…

fmt.Printf を使用して、整数の %d 動詞を使用して、'eta=36' に続いて改行を出力します。

エディターを読み込み中…
ヒントを表示

`Printf` は改行を追加しません。フォーマット文字列に `\\n` を含める必要があります。

3 回の試行後に解決策が利用可能になります

Quiz#go.m1.l5.e3
準備完了

値の動的な TYPE を出力する動詞はどれですか?

Go
fmt.Printf("?\n", 3.14)
回答の選択肢

要約

  • Print/Println/Printf はスペースと改行が異なります。
  • %v は、任意の型で機能するワイルドカードです。 %+v はフィールド名を示します。
  • %T はタイプを出力します (素早いデバッグに役立ちます)。
  • Sprintf は文字列を構築します。 Errorf は、ラッピング (%w) でエラーをビルドします。
  • Printf は改行を追加しません。フォーマット文字列に自分で書きます。