普通占位符
| 占位符 | 说明 | 举例 | 输出 |
| %v | 相应值的默认格式。 | Printf("%v", people) | {zhangsan} |
| %+v | 打印结构体时,会添加字段名 | Printf("%+v", people) | {Name:zhangsan} |
| %#v | 相应值的Go语法表示 | Printf("#v", people) | main.Human{Name:"zhangsan"} |
| %T | 相应值的类型的Go语法表示 | Printf("%T", people) | main.Human |
| %% | 字面上的百分号,并非值的占位符 | Printf("%%") | % |
整数占位符
| 占位符 | 说明 | 举例 | 输出 |
| %b | 二进制表示 | Printf("%b", 5) | 101 |
| %c | 相应Unicode码点所表示的字符 | Printf("%c", 0x4E2D) | 中 |
| %d | 十进制表示 | Printf("%d", 0x12) | 18 |
| %o | 八进制表示 | Printf("%d", 10) | 12 |
| %q | 单引号围绕的字符字面值,由Go语法安全地转义 | Printf("%q", 0x4E2D) | '中' |
| %x | 十六进制表示,字母形式为小写 a-f | Printf("%x", 13) | d |
| %X | 十六进制表示,字母形式为大写 A-F | Printf("%x", 13) | D |
| %U | Unicode格式:U+1234,等同于 "U+%04X" | Printf("%U", 0x4E2D) | U+4E2D |
p := point{1, 2}
fmt.Printf("%v
", p) //{1,2}
fmt.Printf("%+v
", p) //{x:1 y:2}
fmt.Printf("%#v
", p) //main.point{x:1, y:2}
fmt.Printf("%T
", p) // main.point
fmt.Printf("%t
", true) //true
fmt.Printf("%d
", 123) //123
fmt.Printf("%b
", 14) //1110
fmt.Printf("%c
", 33) //!
fmt.Printf("%x
", 456) //1c8
fmt.Printf("%f
", 78.9) //78.900000
fmt.Printf("%e
", 123400000.0) //1.234000e+08
fmt.Printf("%E
", 123400000.0) //1.234000E+08
fmt.Printf("%s
", ""string"") //"string"
fmt.Printf("%q
", ""string"")//""string""
fmt.Printf("%x
", "hex this") //6865782074686973
fmt.Printf("%p
", &p) //0xc0000b4010
fmt.Printf("|%6d|%6d|
", 12, 345) //| 12| 345|
fmt.Printf("|%6.2f|%6.2f|
", 1.2, 3.45) //| 1.20| 3.45|
fmt.Printf("|%-6.2f|%-6.2f|
", 1.2, 3.45) //|1.20 |3.45 |
fmt.Printf("|%6s|%6s|
", "foo", "b") //| foo| b|
fmt.Printf("|%-6s|%-6s|
", "foo", "b") //|foo |b |
s := fmt.Sprintf("a %s", "string")
fmt.Println(s) //a string
fmt.Fprintf(os.Stderr, "an %s
", "error")//an error

