格式化输出格式
最后更新于:2022-04-02 02:43:50
[TOC]
> [参考](https://www.cnblogs.com/yinzhengjie/p/7680829.html)
## 通用
```
%v 值的默认格式表示。当输出结构体时,扩展标志(%+v)会添加字段名
%#v 值的Go语法表示
%+v 值的Go语法表示
%T 值的类型的Go语法表示
%% 百分号
```
实例
```
a:=struct{
name string
}{
name:"asd",
}
fmt.Printf("%v\n", a) // {asd}
fmt.Printf("%+v\n", a) // {name:asd}
fmt.Printf("%#v\n", a) // struct { name string }{name:"asd"}
fmt.Printf("%T\n", 13) // int
fmt.Printf("%%\n") // % 输出 百分号
```
## 布尔值
```
%t 单词true或false
```
实例
```
fmt.Printf("%t\n",true ) // true
fmt.Printf("%t\n",1 ) // %!t(int=0)
```
## 整数
```
%b 表示为二进制
%c 该值对应的unicode码值
%d 表示为十进制
%o 表示为八进制
%q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
%x 表示为十六进制,使用a-f
%X 表示为十六进制,使用A-F
%U 表示为Unicode格式:U+1234,等价于"U+%04X"
```
## 浮点数、复数的两个组分
```
%b 无小数部分、二进制指数的科学计数法,如-123456p-78;参见strconv.FormatFloat %e 科学计数法,如-1234.456e+78 %E 科学计数法,如-1234.456E+78 %f 有小数部分但无指数部分,如123.456 %F 等价于%f %g 根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)
%G 根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)
```
实例
```
fmt.Printf("%b\n", 3) // 11 只用于小数整数,转为二进制
fmt.Printf("%F\n", 3.33333333333) // 3.333333
fmt.Printf("%G\n", 3.33333333333) // 3.33333333333
```
## 字符串和[]byte
```
%s 直接输出字符串或者[]byte %q 该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示
%x 每个字节用两字符十六进制数表示(使用a-f)
%X 每个字节用两字符十六进制数表示(使用A-F)
```
实例
```
fmt.Printf("%s\n", "hello,世界") // hello,世界
fmt.Printf("%s\n", []byte("hello,世界")) // hello,世界
fmt.Printf("%x\n", "o") // 6f
fmt.Printf("%X\n", "o") // 6F
```
## 指针
```
a :="a"
fmt.Printf("%p\n", &a) // 0xc00004c1e0
```
## 宽度 / 精度
宽度通过一个紧跟在**百分号后面的十进制数**指定,如果未指定宽度,则表示值时除必需之外不作填充。
精度通过(可能有的)宽度后跟**点号后跟的十进制数**指定。如果未指定精度,会使用默认精度;如果点号后没有跟数字,表示精度为0
```
%f: 默认宽度,默认精度
%9f 宽度9,默认精度
%.2f 默认宽度,精度2
%9.2f 宽度9,精度2
%9.f 宽度9,精度0
```
';