[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 ```