格式化占位符

占位符是在字符串中的一个特殊存在,用于在程序层面格式化数据;同一个对象,在使用不同的占位符会有不一样的输出。

下面是一个例子:

1
2
3
4
5
s := fmt.Sprintf("%s语言的格式化占位符","Go")
fmt.Print(s)

//输出
Go语言的格式化字符串

%s表示格式化占位符,将Go字符串填充到%s位置。当然占位符有很多类型,%s只是其中一种,还有其他类型。

函数支持

在Go语言中,标准包fmt有很多格式化的工具函数,函数名末尾通常以f结尾,列举如下:

  • fmt.Printf格式化字符串并打印到终端;
  • fmt.Sprintf 格式化字符串并返回了;
  • fmt.Sscanf从子复查u年中解析占位符的对应位置数据;
  • fmt.Fscanfio.Reader类型中读取数据并解析占位符的对应位置数据,用于读取文件、终端;
  • fmt.Fprintf将格式化的字符串数据输出到io.Writer类型中,用于输出文件;
  • fmt.Errorf格式化方式创建一个错误类型信息。

占位符类型

示例

先创建一个数据对象,用于打印

1
2
3
4
5
type Example struct {
Content string
}

var data = Example{Content: "示例"}

通用占位符

%v

%v以及变种该占位符能输出所有类型的占位符数据,%T用于打印变量的类型

  • %v
  • %+v
  • %#v

%v:用于获取该数据的值,如果是结构体,则输出所有字段的值。

1
2
3
fmt.Printf("%v",data)
// 输出
{示例}

%+v:获取数据的值,如果是结构体,会连同字段名一起输出。

1
2
3
fmt.Printf("%+v",data)
// 输出
{Content:示例}

%#v:获取数据的值,如果是结构体,会连同结构体名和字段名一起输出。

1
2
3
fmt.Printf("%+v",data)
// 输出
main.Example{Content:示例}

%T

%T:用于获取数据类型

1
2
3
fmt.Printf("%T",data)
//输出
main.Example

布尔占位符

%t,输出true或false

1
2
3
fmt.Printf("%t",true)
// 输出
true

整数占位符

整数占位符包括了二进制、八进制、十进制以及Unicode码等的占位符。

%b

该占位符会输出数据所对应的二进制,b对应 binary

1
2
3
fmt.Printf("%b",4)
// 输出
100

%o

该占位符会输出数据所对应的八进制,o对应octonary

1
2
3
fmt.Printf("%o,%o,%o",10,010,0x10)
// 输出
12,10,20

如果需要打印0打头的八进制,那需要使用%#o

1
2
3
fmt.Printf("%#o",10)
// 输出
012

%d

该占位符会输出数据所对应的十进制,d对应decimal

1
2
3
fmt.Printf("%d,%d,%d", 10, 010, 0x10)
// 输出
10,8,16

除此之外,还可以指定最小宽度,以5为例子,格式如下:

占位符 说明
%5d 最小宽度为5,右对齐,左边留白
%-5d 左对齐,右边留白
%05d 数字位数不足5位时,左边补零

示例:

1
2
3
fmt.Printf("|%5d|%-5d|%05d|", 1, 1, 1)
// 输出
| 1|1 |00001|

%x

该占位符会输出数据所对应的十六进制,字母形式为小些 a -f ,%#x输出带0x开头。

1
2
3
fmt.Printf("%x,%#x",13,13)
// 输出
d,0xd

%X

该占位符会输出数据所对应的十六进制,字母形式为小些 A-F ,%#X输出带0x开头。

1
2
3
fmt.Printf("%X, %#X", 13, 13)
// 输出
D, 0XD

%c

该占位符输出数据所对应的字符,大多数用于Unicode转字符

1
2
3
fmt.Printf("%c", 0x82d7)
// 输出

%q

同 %c 类似,都是Unicode 码转字符,只是结果多了单引号。

1
2
3
fmt.Printf("%q", 0x82d7)
// 输出
'苗'

浮点数

%f

该占位符用于展示数据所对应的浮点数,默认保留6位小数点。

1
2
3
fmt.Printf("%f", 10.2)
// 输出
10.200000

与十进制数一样,有拓展用法

%.2f表示保留2位小数,也可以加入最小宽度:

  • %9.2f宽度最小为9,包含小数点和小数位,精度为2
  • %9.f%9f,宽度最小为9
1
2
3
fmt.Printf("|%.2f|,|%9.5f|,| %9.f|\n", 3.1415215, 3.1415215, 3.1415215)
// 输出
|3.14|,| 3.14152|,| 3|

%g

该占位符以最少的数字来表示

1
2
3
fmt.Printf("%g\n\n",3.1415123123)
// 输出
3.1415123123

扩展用法,可以使用最多x位数组,例如:%.3g, 表示最多3位数字来代表

%e

该占位符用于展示数据岁对应的科学计数法,默认是展示6位,其余使用科学计数法展示

1
2
3
fmt.Printf("%e\n\n",3.1415123123)
// 输出
3.141512e+00

字符串和字节占位符

%s

该占位符用于展示字符串和字符切片

1
2
3
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中比较常用的一些占位符,如果需要更加惊喜的控制输出,请访问官方文档查询用法。