Go 字符串格式化备忘录

Last Modified: 2023/08/11

概述

本文将会列出 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"})
有问题吗?点此反馈!

温馨提示:反馈需要登录