格式化占位符
占位符是在字符串中的一个特殊存在,用于在程序层面格式化数据;同一个对象,在使用不同的占位符会有不一样的输出。
下面是一个例子:
1 | s := fmt.Sprintf("%s语言的格式化占位符","Go") |
%s
表示格式化占位符,将Go
字符串填充到%s
位置。当然占位符有很多类型,%s
只是其中一种,还有其他类型。
函数支持
在Go语言中,标准包fmt
有很多格式化的工具函数,函数名末尾通常以f
结尾,列举如下:
fmt.Printf
格式化字符串并打印到终端;fmt.Sprintf
格式化字符串并返回了;fmt.Sscanf
从子复查u年中解析占位符的对应位置数据;fmt.Fscanf
从io.Reader
类型中读取数据并解析占位符的对应位置数据,用于读取文件、终端;fmt.Fprintf
将格式化的字符串数据输出到io.Writer
类型中,用于输出文件;fmt.Errorf
格式化方式创建一个错误类型信息。
占位符类型
示例
先创建一个数据对象,用于打印
1 | type Example struct { |
通用占位符
%v
%v
以及变种该占位符能输出所有类型的占位符数据,%T
用于打印变量的类型
%v
%+v
%#v
%v:用于获取该数据的值,如果是结构体,则输出所有字段的值。
1 | fmt.Printf("%v",data) |
%+v:获取数据的值,如果是结构体,会连同字段名一起输出。
1 | fmt.Printf("%+v",data) |
%#v:获取数据的值,如果是结构体,会连同结构体名和字段名一起输出。
1 | fmt.Printf("%+v",data) |
%T
%T:用于获取数据类型
1 | fmt.Printf("%T",data) |
布尔占位符
%t
,输出true或false
1 | fmt.Printf("%t",true) |
整数占位符
整数占位符包括了二进制、八进制、十进制以及Unicode码等的占位符。
%b
该占位符会输出数据所对应的二进制,b对应 binary
1 | fmt.Printf("%b",4) |
%o
该占位符会输出数据所对应的八进制,o对应octonary
1 | fmt.Printf("%o,%o,%o",10,010,0x10) |
如果需要打印0打头的八进制,那需要使用%#o
1 | fmt.Printf("%#o",10) |
%d
该占位符会输出数据所对应的十进制,d对应decimal
1 | fmt.Printf("%d,%d,%d", 10, 010, 0x10) |
除此之外,还可以指定最小宽度,以5为例子,格式如下:
占位符 | 说明 |
---|---|
%5d | 最小宽度为5,右对齐,左边留白 |
%-5d | 左对齐,右边留白 |
%05d | 数字位数不足5位时,左边补零 |
示例:
1 | fmt.Printf("|%5d|%-5d|%05d|", 1, 1, 1) |
%x
该占位符会输出数据所对应的十六进制,字母形式为小些 a -f ,%#x
输出带0x开头。
1 | fmt.Printf("%x,%#x",13,13) |
%X
该占位符会输出数据所对应的十六进制,字母形式为小些 A-F ,%#X
输出带0x开头。
1 | fmt.Printf("%X, %#X", 13, 13) |
%c
该占位符输出数据所对应的字符,大多数用于Unicode
转字符
1 | fmt.Printf("%c", 0x82d7) |
%q
同 %c
类似,都是Unicode
码转字符,只是结果多了单引号。
1 | fmt.Printf("%q", 0x82d7) |
浮点数
%f
该占位符用于展示数据所对应的浮点数,默认保留6位小数点。
1 | fmt.Printf("%f", 10.2) |
与十进制数一样,有拓展用法
%.2f
表示保留2位小数,也可以加入最小宽度:
%9.2f
宽度最小为9,包含小数点和小数位,精度为2%9.f
或%9f
,宽度最小为9
1 | fmt.Printf("|%.2f|,|%9.5f|,| %9.f|\n", 3.1415215, 3.1415215, 3.1415215) |
%g
该占位符以最少的数字来表示
1 | fmt.Printf("%g\n\n",3.1415123123) |
扩展用法,可以使用最多x位数组,例如:%.3g
, 表示最多3位数字来代表
%e
该占位符用于展示数据岁对应的科学计数法,默认是展示6位,其余使用科学计数法展示
1 | fmt.Printf("%e\n\n",3.1415123123) |
字符串和字节占位符
%s
该占位符用于展示字符串和字符切片
1 | fmt.Printf("%s|%s", "老苗", []byte("嘿嘿嘿")) |
下面是一些拓展用法,以5为例
占位符 | 说明 |
---|---|
%5s | 最小宽度为5 |
%-5s | 最小宽度为5(左对齐) |
%.5s | 最大宽度为5 |
%5.7s | 最小宽度为5,最大宽度为7 |
%-5.7s | 最小宽度为5,最大宽度为7(左对齐) |
%5.3s | 如果宽度大于3,则截断 |
%05s | 如果宽度小于5,就会在字符串前面补零 |
以上就是在Go中比较常用的一些占位符,如果需要更加惊喜的控制输出,请访问官方文档查询用法。