Go 字符串格式化备忘录
概述
本文将会列出 Go 语言中常见的字符串格式化方法,可以作为一个备忘录收藏,需要格式化的时候翻阅即可。
默认格式化
package utils
type S struct {
	F string
}
// v 是待格式的值
v := S{"s"}
| 格式化符号 | 格式化结果 | 格式化说明 | 
|---|---|---|
| %v | {s} | 输出值的默认格式化结果 | 
| %+v | {F:s} | 使用了 +,对于结构体而言会输出字段名 | 
| %#v | utils.S{F:"s"} | 输出值的 Go 语法格式表示形式 | 
| %T | utils.S | 输出值的类型 | 
%v 输出值的默认格式化结果,对于每种类型的值,默认格式化结果有所不同,以 struct 为例,默认格式化结果一对大括号包含多个字段的值,slice 的默认格式化结果形如 [el1 el2]。%+v 在 %v 之间加了个加号,我们理解为输出的内容比 %v 更详细点,对于 struct 而言,%+v 比 %v 多输出了字段的名称,然而对于 slice 而言,%v 和 %+v 输出结果完全相同。
既然是默认格式化,那么每种类型值格式化后的结果就是 Go 说了算,如果你想控制格式化结果,可以使用 %s。
整形格式化
v := 15
| 格式化符号 | 格式化结果 | 格式化说明 | 
|---|---|---|
| %d | 15 | 10 进制格式化 | 
| %+d | +15 | 总是显示符号 | 
| %4d | ␣␣15 | 数字表示格式化宽度,宽度不足,左侧补空格 | 
| %-4d | 15␣␣ | 4表示格式化宽度,负号表示宽度不足右侧补空格 | 
| %04d | 0015 | d前面的4仍表示宽度,宽度不足用0补足宽度 | 
| %b | 1111 | 2 进制格式化 | 
| %o | 17 | 8 进制格式化 | 
| %x | f | 16 进制格式化,字母使用小写形式 | 
| %X | F | 16 进制格式化,字母使用大写形式 | 
| %#x | 0xf | 16 进制小写并且在前面加个 0x 前缀 | 
注:这里为了便于展示格式化后的结果,使用了 ␣ 表示空格,实际上空格是看不见的。
字符格式化
v := 'A'
| 格式化符号 | 格式化结果 | 格式化说明 | 
|---|---|---|
| %c | A | 以字符的形式输出 | 
| %q | 'A' | 以字符加单引号的形式输出 | 
| %U | U+0041 | 以 Unicode 形式输出 | 
| %#U | U+0041 'A' | 以 Unicode 外加字符形式输出 | 
布尔格式化
v := true
| 格式化符号 | 格式化结果 | 格式化说明 | 
|---|---|---|
| %t | true | 以字符串形式输出 true | 
指针格式化
i := 10
v := &i
| 格式化符号 | 格式化结果 | 格式化说明 | 
|---|---|---|
| %p | 0xc000018c80 | 以 16 进制的形式格式化指针地址 | 
浮点型格式化
v := 123.456
| 格式化符号 | 格式化结果 | 格式化说明 | 
|---|---|---|
| %e | 1.234560e+02 | 以科学计数法形式格式化 | 
| %f | 123.456000 | 以 10 进制形式格式化 | 
| %.2f | 123.46 | 以 10 进制形式格式化,小数点后面保留两位 | 
| %8.2f | ␣␣123.46 | 以 10 进制形式格式化,小数点后面保留两位,总宽度为 8,不足左边补空格 | 
| %g | 123.456 | 当数值过大使用科学计数法,否则使用 10 进制格式化 | 
字符串或字节切片格式化
v := "café"
| 格式化符号 | 格式化结果 | 格式化说明 | 
|---|---|---|
| %s | café | 以字符串形式格式化 | 
| %6s | ␣␣café | 指定宽度格式化,宽度不足左侧补空格 | 
| %-6s | café␣␣ | 指定宽度格式化,宽度不足右侧不空格 | 
| %q | "café" | 字符串使用引号包裹 | 
| %x | 636166c3a9 | 以 16 进制形式表示字符串的字节 | 
| % x | 63 61 66 c3 a9 | 以 16 进制形式表示字符串的字节,字节间使用空格分隔 | 
%s 表示以字符串形式格式化值,值的字符串表示像是我们是可以控制的。我们只需要实现 String() 方法即可。
type S struct {
	F string
}
func (s S) String() string {
	return "Ss"
}
// 会输出 Ss 
fmt.Printf("%s", S{"1"})
有问题吗?点此反馈!
温馨提示:反馈需要登录


