忘れがちな書式指定子
いちいち調べるのも面倒臭いので、普段使いそうな書式指定子の使い方を例付きでまとめた
各書式指定子の説明文は、基本的に以下のサイトを引用させていただいている
go fmtパッケージ
各書式指定子の使い方
%v デフォルトフォーマット
%v デフォルトフォーマットを適用した値 構造体を出力する際、+フラグ(%+v)を加えるとフィールド名が表示される
package main import ( "fmt" ) type Person struct { Name string Favorite string } func main() { p := new(Person) p.Name = "sekky" p.Favorite = "Programming" fmt.Printf("構造体 = %v", p) }
結果
構造体 = &{sekky Programming}
%+v フラグ付き デフォルトフォーマット
フラグ(%+v)を加えるとフィールド名が表示される
package main import ( "fmt" ) type Person struct { Name string Favorite string } func main() { p := new(Person) p.Name = "sekky" p.Favorite = "Programming" fmt.Printf("構造体 = %+v", p) }
結果
構造体 = &{Name:sekky Favorite:Programming}
%#v Go言語の構文で表現
%#v この値をGo言語の構文で表現する
package main import ( "fmt" ) type Person struct { Name string Favorite string } func main() { p := new(Person) p.Name = "sekky" p.Favorite = "Programming" fmt.Printf("構造体 = %#v\n", p) a := [...]string{"Go", "Java", "Python", "Ruby", "Rust"} fmt.Printf("配列 = %#v", a) }
結果
構造体 = &main.Person{Name:"sekky", Favorite:"Programming"} 配列 = [5]string{"Go", "Java", "Python", "Ruby", "Rust"}
%T 値の型
%T この値の型をGo言語の構文で表現する
package main import ( "fmt" ) type Person struct { Name string Favorite string } func main() { p := new(Person) p.Name = "sekky" p.Favorite = "Programming" fmt.Printf("構造体 = %T\n", p) a := [...]string{"Go", "Java", "Python", "Ruby", "Rust"} fmt.Printf("配列 = %T\n", a) s := []int{0, 1, 2} fmt.Printf("スライス = %T\n", s) n := 7 fmt.Printf("int = %T\n", n) str := "sekky" fmt.Printf("string = %T\n", str) b := true fmt.Printf("bool = %T\n", b) }
結果
構造体 = *main.Person 配列 = [5]string スライス = []int int = int string = string bool = bool
%t 単語、trueまたはfalse
%t 単語、trueまたはfalse
package main import ( "fmt" ) type Person struct { Name string Favorite string } func main() { b := true fmt.Printf("%t\n", b) b = false fmt.Printf("%t\n", b) str := "Go" fmt.Printf("%t\n", str) n := 1 fmt.Printf("%t\n", n) p := new(Person) p.Name = "sekky" fmt.Printf("%t\n", p) }
結果
true false %!t(string=Go) %!t(int=1) &{%!t(string=sekky) %!t(string=)}
%s 文字列、スライス
%s 文字列またはスライスそのまま
package main import ( "fmt" ) func main() { str := "Go" fmt.Printf("文字列 = %s\n", str) s := []string{"Go", "Java"} fmt.Printf("スライス = %s", s) // 配列では使用できないため、以下のコードはエラーになる // s := [2]string{"Go", "Java"} // fmt.Printf("配列 = %s", s) }
結果
文字列 = Go スライス = [Go Java]
数値系
数値系はまとめて書く
コメント部分は以下を引用
go fmtパッケージ
package main import ( "fmt" ) func main() { // %b 基数2 b := 5 fmt.Printf("基数2 = %b\n", b) // %c 対応するUnicodeコードポイントによって表される文字 c := '\101' fmt.Printf("Unicodeコードポイント = %c\n", c) // %d 基数10 d := 5 fmt.Printf("基数10 = %d\n", d) // %o 基数8 o := 20 fmt.Printf("基数8 = %o\n", o) // %x 基数16、10以上の数には小文字(a-f)を使用 x := 2059 fmt.Printf("基数16、10以上の数には小文字(a-f)を使用 = %x\n", x) // %X 基数16、10以上の数には大文字(A-F)を使用 X := 2059 fmt.Printf("基数16、10以上の数には大文字(A-F)を使用 = %X\n", X) // %U ユニコードフォーマット: U+1234; "U+%x"と同じ。デフォルトは、4桁 U := '\101' fmt.Printf("ユニコードフォーマット = %U\n", U) }
結果
基数2 = 101 Unicodeコードポイント = A 基数10 = 5 基数8 = 24 基数16、10以上の数には小文字(a-f)を使用 = 80b 基数16、10以上の数には大文字(A-F)を使用 = 80B ユニコードフォーマット = U+0041
ポインタ
%p 16進数文字列、先頭に0x
package main import ( "fmt" ) type Person struct { Name string Favorite string } func main() { p := new(Person) p.Name = "sekky" p.Favorite = "Programming" fmt.Printf("構造体 = %p", p) }
結果
構造体 = 0x1040a130
参考文献
松尾 愛賀 (2016/4/15)『スターティングGo言語』 翔泳社