# fmt.Printf总结

helloworld

概述

printf系列函数都支持format格式化参数,在这里我们按照占位符将被替换的变量类型划分,方便查询和记忆。

# 1 常用格式功能说明

动 词 功 能
%v 按值的本来值输出
%+v 在 %v 基础上,对结构体字段名和值进行展开
%#v 输出 Go 语言语法格式的值
%T 输出 Go 语言语法格式的类型和值
%% 输出 % 本体
%b 整型以二进制方式显示
%o 整型以八进制方式显示
%d 整型以十进制方式显示
%x 整型以十六进制方式显示
%X 整型以十六进制、字母大写方式显示
%U Unicode 字符
%f 浮点数
%p 指针,十六进制方式显示

# 2 具体printf方法的格式说明

# 2.1 通用占位符

str:="Hello world"
//相应值的默认格式
fmt.Printf("%v",str )
fmt.Println()

//类似%v,但输出结构体时会添加字段名式
fmt.Printf("%+v",str )
fmt.Println()

//相应值的Go语法表示
fmt.Printf("%#v",str )
fmt.Println()

//相应值的类型的Go语法表示	
fmt.Printf("%T",str )
fmt.Println()
//字面上的百分号,并非值的占位符
fmt.Printf("%%" )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
占位符 说明 示例 输出
%v 相应值的默认格式 Printf("%v",str ) Hello world
%+v 类似%v,但输出结构体时会添加字段名式 Printf("%+v",str ) Hello world
%#v 相应值的Go语法表示 Printf("%#v",str ) ) "Hello world"
%T 相应值的类型的Go语法表示 Printf("%T",str )) string
%% 字面上的百分号,并非值的占位符 Printf("%%" ) %

# 2.2 布尔值

占位符 说明 示例 输出
%t 单词true或false Printf("%t",true) true

# 2.3 整数

占位符 说明 示例 输出
%b 二进制表示 Printf("%b",5) 101
%c 该值对应的unicode码值 Printf("%c",0x4E2d)
%d 十进制表示 Printf("%d",0x12) 18
%o 八进制表示 Printf("%o",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

# 2.4 浮点数与复数

占位符 说明 示例 输出
%b 无小数部分、指数为二的幂的科学计数法,与strconv.FormatFloat的'b'转换格式一致。 Printf("%b",10.20) 5742089524897382p-49
%e 科学计数法,如-1234.456e+78 Printf("%e",10.20) 1.020000e+01
%E 科学计数法,如-1234.456E+78 Printf("%E",10.20) 1.020000E+01
%f 有小数部分但无指数部分,如123.456 Printf("%f",10.20) 10.200000
%g 根据实际情况采用%e或%f格式(以获得更简洁、准确的输出) Printf("%g",10.20) 10.2
%G 根据实际情况采用%E或%F格式(以获得更简洁、准确的输出) Printf("%G",10.20) (10.2+2i)

# 2.5 字符串与字节切片

占位符 说明 示例 输出
%s 输出字符串表示(string类型或[]byte) Printf("%s",[]byte("Go语言")) Go语言
%q 双引号围绕的字符串,由Go语法安全的转译 Printf("%q","Go语言") "Go语言"
%x 十六进制,小写字母,每字节两个字符 Printf("%x","golang") 676f6c616e67
%X 十六进制,大写字母,每字节两个字符 Printf("%X","golang") 676F6C616E67
%10s 输出字符串最小宽度为10(右对齐) Printf("%10s", "oldboy")
%-10s 输出字符串最小宽度为10(左对齐) Printf("%-10s", "oldboy")
%.5s 输出字符串最大宽度为5 Printf("%.5s", "oldboy")
%5.10s 输出字符串最小宽度为5,最大宽度为10 Printf("%5.10s", "oldboy")
%-5.10s 输出字符串最小宽度为5,最大宽度为10(左对齐) Printf("%-5.10s", "oldboy")
%5.3s 输出字符串宽度为5,如果原字符串宽度大于3,则截断 Printf("%5.3s", "oldboy")
%010s 如果宽度小于10,就会在字符串前面补零 Printf("%010s", "oldboy")

# 2.6 指针

占位符 说明 示例 输出
%p 十六进制表示,前缀 0x Printf("%p", &str) %0xc0000321f0
%#p 不带前缀 0x Printf("%#p", &str) c0000321f0