golang 的fmt 包实现了格式化I/O函数
```
func Print(a ...interface{}) (n int, err error)
func Sprint(a ...interface{}) string
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)
func Sprintln(a ...interface{}) string
func Fprintln(w io.Writer, a ...interface{})
func Printf(format string, a ...interface{}) (n int, err error)
func Sprintf(format string, a ...interface{}) string
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
```
**按照输出格式划分**
如果后缀是"`f`", 则指定format格式输出,如果后缀是"`ln`",则换行输出。
| 函数 | 区别 |
| --- | --- |
| Println、Fprintln、Sprintln | 输出内容时会加上换行符 |
| Print、Fprint、Sprint | 输出内容时不加上换行符 |
| Printf、Fprintf、Sprintf | 按照指定格式化文本输出内容 |
**按照输出终端划分**
如果前缀是"`F`", 则指定了`io.Writer`,如果前缀是"`S`", 则是输出到字符串
| 函数 | 区别 |
| --- | --- |
| Print、Printf、Println | 输出内容到标准输出os.Stdout |
| Fprint、Fprintf、Fprintln | 输出内容到指定的io.Writer |
| Sprint、Sprintf、Sprintln | 输出内容到字符串 |
**format格式**
| 格式 | 含义 | 示例 | 结果
| --- | --- | --- | ---
| %% | 一个%字面量 | fmt.Printf("输出%%") | 输出%
| %b | 一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数 | fmt.Printf("输出二进制:%b", 5) | 输出二进制:101
| %c | 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 | fmt.Printf("数字转ASCII码:%c", 65) | 数字转ASCII码:A
| %d | 一个十进制数值(基数为10) | fmt.Println(fmt.Sprintf("字符串拼接数字:%d", 100)) | 字符串拼接数字:100
| %e | 以科学记数法e表示的浮点数或者复数值 | fmt.Printf("%e", 3.1415926) | 3.141593e+00
| %E | 以科学记数法E表示的浮点数或者复数值 | fmt.Printf("%E", 3.1415926) | 3.141593E+00
| %f | 以标准记数法表示的浮点数或者复数值 | fmt.Printf("%.7f", 3.1415926) | 3.1415926
| %g | 以%e或者%f表示的浮点数或者复数,任何一个都以最为紧凑的方式输出 | fmt.Printf("%g", 3.1415926) | 3.1415926
| %G | 以%E或者%f表示的浮点数或者复数,任何一个都以最为紧凑的方式输出 | fmt.Printf("%G", 3.1415926) | 3.1415926
| %o | 一个以八进制表示的数字(基数为8) | fmt.Printf("%o", -233) | -351
| %p | 以十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示 | |
| %q | 使用Go语法以及必须时使用转义,以双引号括起来的字符串或者字节切片\[\]byte,或者是以单引号括起来的数字 | |
| %s | 直接输出字符串或者[]byte | fmt.Printf("%s", "hello world") | hello world
| %t | 以true或者false输出的布尔值 | fmt.Printf("%t", true) | true
| %T | 使用Go语法输出的值的类型 | fmt.Printf("%T", 123) | int
| %U | 一个用Unicode表示法表示的整型码点,默认值为4个数字字符 | fmt.Printf("%U", 567) | U+0237
| %v | 值的默认格式表示。当输出结构体时,扩展标志(%#v)会添加字段名 | type person struct{<br>name string<br>}<br>func main() {<br>v := person{}<br>fmt.Printf("%#v", v)<br>} | main.person{name:""}
| %x | 以十六进制表示的整型值(基数为十六),使用a-f表示 | |
| %X | 以十六进制表示的整型值(基数为十六),使用A-F表示 | |