Go语言之格式化占位符
格式化的输入与输出,都需要使用到格式化占位符,Go 语言的格式化占位符大概可分为普通占位符、 布尔占位符、整数占位符、浮点数和 复数占位符、字符串与 字节切片占位符、指针占位符以及其它标记等
1、普通占位符
| 占位符 | 说明 | 示例 | 结果 |
| %v | 值的默认格式 | Printf(“%v”,”hello”) | hello |
| %#v | 值的Go语法表示 | Printf(“%#v”,”hello”) | “hello” |
| %T | 值的类型的Go语法表示 | Printf(“%T”,”hello”) | string |
| %% | 字面上的百分号,并非值的占位符 | Printf(“%%”) | % |
| %+v | 打印结构体时,会添加字段名 | Printf(“%+v”,abc) | {Name:”hello”} |
2、布尔占位符
| 占位符 | 说明 | 示例 | 结果 |
| %t | true 或 false | Printf(“%t”, true) | true |
3、整数占位符
| 占位符 | 说明 | 示例 | 结果 |
| %b | 二进制表示 | Printf(“%b”, 10) | 1010 |
| %c | 相应 Unicode 码点所表示的字符 | Printf(“%c”, 0x4E2D) | 中 |
| %d | 十进制表示 | Printf(“%d”, 10) | 10 |
| %o | 八进制表示 | Printf(“%o”, 10) | 12 |
| %q | 单引号围绕的字符字面值,由Go语法安全地转义 | Printf(“%q”, 0x4E2D) | ‘中’ |
| %x | 十六进制表示,字母形式为小写 a-f | Printf(“%x”, 10) | a |
| %X | 十六进制表示,字母形式为大写 A-F | Printf(“%X”, 10) | A |
| %U | Unicode格式:U+1234,等同于 “U+%04X” | Printf(“%U”, 0x4E2D) | U+4E2D |
4、浮点数和复数的组成部分
| 占位符 | 说明 | 示例 | 结果 |
| %e | 科学计数法 | Printf(“%e”, 10.5) | 1.050000e+01 |
| %E | 科学计数法 | Printf(“%E”, 10.5) | 1.050000E+01 |
| %f | 有小数点而无指数 | Printf(“%f”, 10.5) | 10.500000 |
| %g | 根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的0) | Printf(“%f”, 10.50) | 10.5 |
| %G | 根据情况选择 %E 或 %f 以产生更紧凑的(无末尾的0) | Printf(“%f”, 10.50) | 10.5 |
| %b | 无小数部分的,指数为二的幂的科学计数法 |
注意:一般比较常用的就是%f
(1)、下面将浮点数保留两位小数并输出,如图:

运行结果如下:

(2)、下面例子表示保留三位小数打印输出,如图:


注意:golang的浮点数精度计算时按照四舍五入的规则来的
5、字符串与字节切片
| 占位符 | 说明 | 示例 | 结果 |
| %s | 输出字符串表示(string类型或[]byte) | Printf(“%s”, []byte(“hello”)) | hello |
| %q | 双引号围绕的字符串,由Go语法安全地转义 | Printf(“%q”, “hello”) | “hello” |
| %x | 十六进制,小写字母,每字节两个字符 | Printf(“%x”, “hello”) | 68656c6c6f |
| %X | 十六进制,大写字母,每字节两个字符 | Printf(“%X”, “hello”) | 68656C6C6F |
下面例子表示格式化字符串,如图:

运行结果如下:

下面例子在上面基础上,设置了格式化宽度为20,如图:

运行结果中间空出了20个字符的长度,如下:

6、指针
| 占位符 | 说明 | 示例 | 结果 |
| %p | 十六进制表示,前缀 0x | Printf(“%p”, &hello) | 0xc0000140b0 |
下面例子打印切片的指针地址,如果不使用%p,无法看到指针地址,如图:


从打印结果可以看出,直接使用&打印的不是切片的内存地址,要使用%p才可以
格式化指定宽度
注意:每个格式化占位符都可以指定宽度的,比如%s、%d、%f等
1、下面例子是格式化的时候指定宽度,如图:

- -10:表示指定格式化的内容宽度为10个字符,不足用空格补全,并左对齐
- 20:指定宽度为20,不足用空格补全,右对齐

注:宽度是对应的后面的内容的,比如-10对应的是Name,实际是格式化出10个字符,然后Name占用了4个,那么剩余6个使用空格补全,并且空格在Name后面,因为”-“表示左对齐,如果不加”-“,那么表示右对齐,空格在左Name在右侧
2、除了指定宽度,也可以使用动态宽度的方式,使用星号(*),如图:


3、将默认情况下的空格使用”-“替换,如图:

- -1:表示替换所有



