Goはprintf 規約に従った文字列書式設定を強力にサポートします。以下に一般的な文字列書式設定タスクの例をいくつか示します。
|
|
|

package main
|
|
import (
"fmt"
"os"
)
|
|
type point struct {
x, y int
}
|
|
func main() {
|
Goには、一般的なGo値を書式設定するために設計された複数のプリント「動詞」があります。たとえば、これによりpoint 構造体のインスタンスがプリントされます。
|
p := point{1, 2}
fmt.Printf("struct1: %v\n", p)
|
値が構造体の場合、%+v バリアントには構造体のフィールド名が含まれます。
|
fmt.Printf("struct2: %+v\n", p)
|
%#v バリアントは、値のGoシンタックス表現を出力します。つまり、その値を生成するソースコードスニペットです。
|
fmt.Printf("struct3: %#v\n", p)
|
値のタイプを出力するには、%T を使用します。
|
fmt.Printf("type: %T\n", p)
|
ブール値の書式設定は簡単です。
|
fmt.Printf("bool: %t\n", true)
|
整数の書式設定には多くのオプションがあります。標準の10進数形式の場合は%d を使用します。
|
fmt.Printf("int: %d\n", 123)
|
これはバイナリー表現を出力します。
|
fmt.Printf("bin: %b\n", 14)
|
これは、指定された整数に対応する文字を出力します。
|
fmt.Printf("char: %c\n", 33)
|
%x は16進エンコードを提供します。
|
fmt.Printf("hex: %x\n", 456)
|
浮動小数点数の書式設定オプションもいくつかあります。基本的な10進数形式の場合は%f を使用します。
|
fmt.Printf("float1: %f\n", 78.9)
|
%e と%E は、(わずかに異なるバージョンの)科学的表記で浮動小数点数をフォーマットします。
|
fmt.Printf("float2: %e\n", 123400000.0)
fmt.Printf("float3: %E\n", 123400000.0)
|
基本的な文字列出力を得るには%s を使用します。
|
fmt.Printf("str1: %s\n", "\"string\"")
|
Goソース内で文字列を二重引用符で囲むには%q を使用します。
|
fmt.Printf("str2: %q\n", "\"string\"")
|
前述の整数と同様に、%x は文字列を16進数形式でレンダリングします。入力1バイトあたり2つの出力文字が使用されます。
|
fmt.Printf("str3: %x\n", "hex this")
|
ポインタの表現を出力するには、%p を使用します。
|
fmt.Printf("pointer: %p\n", &p)
|
数値を書式設定するときは、多くの場合、結果の数値の幅と精度を制御する必要があります。整数の幅を指定するには、動詞の% の後に数値を使用します。既定では、結果は右寄せになり、スペースでパディングされます。
|
fmt.Printf("width1: |%6d|%6d|\n", 12, 345)
|
プリントされた浮動小数点数の幅を指定することもできますが、通常は幅精度構文で小数点以下の桁数も同時に制限します。
|
fmt.Printf("width2: |%6.2f|%6.2f|\n", 1.2, 3.45)
|
左寄せにするには、- フラグを使用します。
|
fmt.Printf("width3: |%-6.2f|%-6.2f|\n", 1.2, 3.45)
|
文字列を書式設定する場合にも幅を制御できます。特に、表形式の出力が整列するようにします。基本的な右寄せの幅。
|
fmt.Printf("width4: |%6s|%6s|\n", "foo", "b")
|
左寄せにするには数値と同じように- フラグを使用します。
|
fmt.Printf("width5: |%-6s|%-6s|\n", "foo", "b")
|
ここまでで、書式設定された文字列をos.Stdout に出力するPrintf を見てきました。Sprintf は文字列をフォーマットして出力を返しますが、実際にははどこにもプリントされません。
|
s := fmt.Sprintf("sprintf: a %s", "string")
fmt.Println(s)
|
Fprintf を使用して、os.Stdout 以外のio.Writers に対してフォーマットとプリントができます。
|
fmt.Fprintf(os.Stderr, "io: an %s\n", "error")
}
|