Go 言語のフォーマット指定子
1. Printf() のためのフォーマット指定子
Go言語は、Printf() ファンクションで使用できる数多くのフォーマット・ヴァーブ(Formatting Verbs)を提供しています。
1.1 汎用的なフォーマット指定子
以下のヴァーブは、すべてのデータタイプに使用できます。
| ヴァーブ | 説明 |
|---|---|
| %v | デフォルトのフォーマットでバリューを出力する |
| %#v | Goのシンタックス形式でバリューを出力する |
| %T | バリューのタイプを出力する |
| %% | % 記号そのものを出力する |
コード例:
package main
import ("fmt")
func main() {
var i = 15.5
var txt = "ハローワールド!"
fmt.Printf("%v\n", i)
fmt.Printf("%#v\n", i)
fmt.Printf("%v%%\n", i)
fmt.Printf("%T\n", i)
fmt.Printf("%v\n", txt)
fmt.Printf("%#v\n", txt)
fmt.Printf("%T\n", txt)
}実行結果:
15.5
15.5
15.5%
float64
ハローワールド!
"ハローワールド!"
string2. インテジャー(Integer)のフォーマット指定子
以下のヴァーブは、インテジャー型のデータに使用できます。
| ヴァーブ | 説明 |
|---|---|
| %b | 2進数(Base 2) |
| %d | 10進数(Base 10) |
| %+d | 10進数(常に符号を表示) |
| %o | 8進数(Base 8) |
| %O | 8進数(先頭に 0o を付与) |
| %x | 16進数(Base 16)、小文字 |
| %X | 16進数(Base 16)、大文字 |
| %#x | 16進数(先頭に 0x を付与) |
| %4d | スペースでパディング(幅4、右揃え) |
| %-4d | スペースでパディング(幅4、左揃え) |
| %04d | ゼロでパディング(幅4) |
コード例:
package main
import ("fmt")
func main() {
var i = 15
fmt.Printf("%b\n", i)
fmt.Printf("%d\n", i)
fmt.Printf("%+d\n", i)
fmt.Printf("%o\n", i)
fmt.Printf("%O\n", i)
fmt.Printf("%x\n", i)
fmt.Printf("%X\n", i)
fmt.Printf("%#x\n", i)
fmt.Printf("%4d\n", i)
fmt.Printf("%-4d\n", i)
fmt.Printf("%04d\n", i)
}実行結果:
1111
15
+15
17
0o17
f
F
0xf
15
15
00153. ストリング(String)のフォーマット指定子
以下のヴァーブは、ストリング型のデータに使用できます。
| ヴァーブ | 説明 |
|---|---|
| %s | プレーンなストリングとして出力 |
| %q | ダブルクォーテーションで囲まれたストリングとして出力 |
| %8s | プレーンなストリングとして出力(幅8、右揃え) |
| %-8s | プレーンなストリングとして出力(幅8、左揃え) |
| %x | バイトバリューの16進数ダンプとして出力 |
| % x | スペース区切りの16進数ダンプとして出力 |
コード例:
package main
import ("fmt")
func main() {
var txt = "ハロー"
fmt.Printf("%s\n", txt)
fmt.Printf("%q\n", txt)
fmt.Printf("%8s\n", txt)
fmt.Printf("%-8s\n", txt)
fmt.Printf("%x\n", txt)
fmt.Printf("% x\n", txt)
}実行結果:
ハロー
"ハロー"
ハロー
ハロー
e3838fe383ade383bc
e3 83 8f e3 83 ad e3 83 bc4. ブール(Boolean)のフォーマット指定子
以下のヴァーブは、ブール型のデータに使用できます。
| ヴァーブ | 説明 |
|---|---|
| %t | ブール演算子のバリューを true または false の形式で出力(%v と同様) |
コード例:
package main
import ("fmt")
func main() {
var i = true
var j = false
fmt.Printf("%t\n", i)
fmt.Printf("%t\n", j)
}実行結果:
true
false5. フロート(Float)のフォーマット指定子
以下のヴァーブは、フロート型のデータに使用できます。
| ヴァーブ | 説明 |
|---|---|
| %e | 指数部分に 'e' を使用した指数表記(Scientific notation) |
| %f | 小数点表記、指数なし |
| %.2f | デフォルトの幅、精度(小数点以下)2桁 |
| %6.2f | 幅6、精度2桁 |
| %g | 必要に応じて指数表記を使用、必要な桁のみ出力 |
コード例:
package main
import ("fmt")
func main() {
var i = 3.141
fmt.Printf("%e\n", i)
fmt.Printf("%f\n", i)
fmt.Printf("%.2f\n", i)
fmt.Printf("%6.2f\n", i)
fmt.Printf("%g\n", i)
}実行結果:
3.141000e+00
3.141000
3.14
3.14
3.141