Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. Go辞典
  3. フォーマット動詞

フォーマット動詞

Goの『fmt』パッケージではフォーマット動詞(verb)を使って値の出力形式を制御します。『%v』はあらゆる型に使えるデフォルト形式で、型ごとに特化した動詞も用意されています。

構文
// 基本的な使い方(fmt.Printf、fmt.Sprintf内で使います)
fmt.Printf("%v\n", 値)      // デフォルト形式
fmt.Printf("%d\n", 整数)    // 10進数の整数
fmt.Printf("%s\n", 文字列)  // 文字列
fmt.Printf("%f\n", 浮動小数点数) // 浮動小数点数

// 幅・精度の指定
fmt.Printf("%10d\n", 42)    // 幅10、右寄せ
fmt.Printf("%-10d\n", 42)   // 幅10、左寄せ
fmt.Printf("%010d\n", 42)   // 幅10、ゼロ埋め
fmt.Printf("%.2f\n", 3.14159) // 小数点以下2桁
fmt.Printf("%8.2f\n", 3.14)  // 幅8、小数点以下2桁
フォーマット動詞一覧
動詞概要
%vデフォルト形式。型に応じた自然な表現で出力します。
%+v構造体のフィールド名も含めて出力します。
%#vGo言語の構文形式で出力します(パッケージ名・型名付き)。
%T値の型名を出力します。
%d整数を10進数で出力します。
%b整数を2進数で出力します。
%o整数を8進数で出力します。
%x / %X整数を16進数(小文字/大文字)で出力します。
%e / %E浮動小数点数を指数表記で出力します。
%f浮動小数点数を小数表記で出力します(デフォルト精度6桁)。
%g / %G値に応じて%eか%fを選択します(コンパクトな表現)。
%s文字列またはバイトスライスを出力します。
%q文字列をダブルクォート付きでGoの文字列リテラル形式で出力します。
%c整数に対応するUnicode文字を出力します。
%t真偽値を'true'または'false'で出力します。
%pポインタを16進数アドレスで出力します。
%%パーセント記号'%'を出力します。
サンプルコード
package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    // 汎用動詞
    p := Person{"Alice", 30}
    fmt.Printf("%v\n", p)    // {Alice 30}
    fmt.Printf("%+v\n", p)   // {Name:Alice Age:30}
    fmt.Printf("%#v\n", p)   // main.Person{Name:"Alice", Age:30}
    fmt.Printf("%T\n", p)    // main.Person

    fmt.Println()

    // 整数の各基数表現
    n := 255
    fmt.Printf("10進数: %d\n", n)
    fmt.Printf("2進数: %b\n", n)
    fmt.Printf("8進数: %o\n", n)
    fmt.Printf("16進数(小): %x\n", n)
    fmt.Printf("16進数(大): %X\n", n)

    fmt.Println()

    // 浮動小数点数のフォーマット
    f := 3.14159265
    fmt.Printf("デフォルト: %f\n", f)
    fmt.Printf("精度指定: %.2f\n", f)
    fmt.Printf("指数表記: %e\n", f)
    fmt.Printf("コンパクト: %g\n", f)

    fmt.Println()

    // 幅と配置
    fmt.Printf("|%10d|\n", 42)    // 右寄せ
    fmt.Printf("|%-10d|\n", 42)   // 左寄せ
    fmt.Printf("|%010d|\n", 42)   // ゼロ埋め

    // 特殊動詞
    fmt.Printf("%q\n", "Hello, 世界") // "Hello, 世界"(エスケープ付き文字列)
    fmt.Printf("%c\n", 65)           // A(文字コード65)
    fmt.Printf("100%%\n")            // 100%(%%でパーセント自体を出力)
}
概要

フォーマット動詞はデバッグ出力から本番のログ出力まで幅広く使われます。型が不明な値の確認には『%v』または『%#v』が便利です。数値の書式整形には『%d』『%f』と幅・精度の組み合わせが強力です。独自型でフォーマットをカスタマイズしたい場合は『String() string』メソッド(Stringerインタフェース)を実装すると、『%v』や『%s』で自動的に呼ばれます。

%sを整数に、%dを文字列に使うなど型と動詞が合わない場合、'%!s(int=42)'のような警告文字列が出力されます。go vetコマンドを使えばこうした不一致をコンパイル前に検出できます。

fmt.Printf()の使い方は『fmt.Println() / Printf()』、文字列フォーマットは『fmt.Sprintf() / Fprintf()』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。