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"})
有问题吗?点此反馈!
温馨提示:反馈需要登录