printf输出格式右对齐
初⼊GO 语⾔-Go 语⾔的%d,%p,%v 等占位符的使⽤
1、⾸先需要了解哪些占位符分别代表什么
这些是死知识,把常⽤的记住,不常⽤的直接查表就⾏了
golang 的fmt 包实现了格式化I/O 函数,类似于C 的 printf 和 scanf 。
定义⽰例类型和变量
type Human struct {Name string }
var people = Human{Name:"zhangsan"}
1)普通占位符
2)布尔占位符
3)整数占位符
4)浮点数和复数的组成部分(实部和虚部)
5)字符串与字节切⽚
占位符说明
举例
输出%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("%%")
%
占位符说明举例
输出%t
true 或 false
Printf("%t", true)
true
占位符说明举例
输出%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
占位符说明
举例输出%b ⽆⼩数部分的,指数为⼆的幂的科学计数法, 与 strconv.FormatFloat 的 'b' 转换格式⼀致。例如 -123456p-78
%e 科学计数法,例如 -1234.456e+78Printf("%e",10.2)  1.020000e+01%E 科学计数法,例如 -1234.456E+78Printf("%e",10.2)  1.020000E+01%f 有⼩数点⽽⽆指数,例如 123.456
Printf("%f",10.2)10.200000%g 根据情况选择 %e 或 %f 以产⽣更紧凑的(⽆末尾的0)输出Printf("%g",10.20)10.2%G
根据情况选择 %E 或 %f 以产⽣更紧凑的(⽆末尾的0)输出
Printf("%G",10.20+2i)
(10.2+2i)
占位符
说明
举例
输出
6)指针
7)其它标记
8)其他
golang 没有 '%u' 点位符,若整数为⽆符号类型,默认就会被打印成⽆符号的。
宽度与精度的控制格式以Unicode 码点为单位。宽度为该数值占⽤区域的最⼩宽度;精度为⼩数点之后的位数。操作数的类型为int 时,宽度与精度都可⽤字符 '*' 表⽰。
对于 %g/%G ⽽⾔,精度为所有数字的总数,例如:123.45,%.4g 会打印123.5,(⽽ %6.2f 会打印123.45)。%e 和 %f 的默认精度为6
对⼤多数的数值类型⽽⾔,宽度为输出的最⼩字符数,如果必要的话会为已格式化的形式填充空格。⽽以字符串类型,精度为输出的最⼤字符数,如果必要的话会直接截断。
2、了解了基本的占位符对应什么格式就要使⽤占位符了
使⽤起来很简单,⼀般配合fmt.Printf()使⽤,因为fmt 的Printf()是有格式的输出,切忌使⽤Println(),否则将会以字符串的形式输出。
%s 输出字符串表⽰(string 类型或[]byte)Printf("%s", []byte("Go 语⾔"))Go 语⾔%q 双引号围绕的字符串,由Go 语法安全地转义Printf("%q", "Go 语⾔")"Go 语⾔"%x ⼗六进制,⼩写字母,每字节两个字符Printf("%x", "golang")676f6c616e67%X
⼗六进制,⼤写字母,每字节两个字符
Printf("%X", "golang")
676F6C616E67
占位符说明
举例
输出%p
⼗六进制表⽰,前缀 0x
Printf("%p", &people)
0x4f57f0
占位符说明
举例输出
+总打印数值的正负号;对于%q (%+q )保证只输出ASCII 编码的字符。Printf("%+q","中⽂")"\u4e2d\u6587"-在右侧⽽⾮左侧填充空格(左对齐该区域)
#备⽤格式:为⼋进制添加前导 0(%#o ) 为⼗六进制添加前导 0x (%#x )或
0X (%#X ),为 %p (%#p )去掉前导 0x ; 如果可能的话,%q (%#q )会打印原始(即反引号围绕的)字符串; 如果是可打印字符,%U (%#U )会写出该字符的Unicode 编码形式(如字符 x 会被打印成 U+0078 'x')。
Printf("%#U",'中')U+4E2D
' '(空格)为数值中省略的正负号留出空⽩(% d ); 以⼗六进制(% x, % X )打印字符串或切⽚时,在字节之间⽤空格隔开
填充前导的0⽽⾮空格;对于数字,这会将填充移到正负号之后