Go中fmt的常见用法总结

一、常用输出函数(按输出目标分类)

函数说明示例
Print / Println / Printf输出到标准输出fmt.Println("Hello")
Fprint / Fprintln / Fprintf输出到任意 io.Writerfmt.Fprintf(os.Stderr, "err: %v", err)
Sprint / Sprintln / Sprintf格式化结果返回字符串(不打印)s := fmt.Sprintf("age=%d", 20)
Errorf格式化后返回 error 类型return fmt.Errorf("invalid: %v", val)

Println/Sprintln/Fprintln 会自动在末尾加换行,Print 不加;Printf 需要显式写 \n

二、常用格式占位符(格式化动词)

动词用于示例输出
%v任意类型的默认格式123 "abc" [1 2]
%#vGo 语法表示(带类型/引号)"abc" []int{1,2}
%T值的类型int string []int
%%百分号字面量%
整数
%d十进制123
%b二进制1111011
%o八进制173
%x / %X十六进制(小写/大写)7b / 7B
%cUnicode 字符{ (ASCII 123)
浮点数
%f十进制小数3.141593
%.2f指定小数位数3.14
%e / %E科学计数法3.141593e+00
%g自动选择 %f 或 %e更紧凑
字符串/字节切片
%s原始字符串hello
%q带双引号的字符串"hello"
%x十六进制字节68656c6c6f
指针
%p十六进制地址0xc0000140f0
布尔
%ttruefalsetrue

三、宽度与精度

通用格式:%[flags][width][.precision]verb

示例含义
%5d宽度 5,右对齐,不足补空格
%-5d宽度 5,左对齐
%05d宽度 5,右对齐,前补零
%5.2f总宽度 5(含小数点),小数 2 位
%5s最小宽度 5 的字符串
%q%x也可跟宽度/精度

四、常用辅助函数

函数作用
fmt.Scan / Scanf / Scanln从标准输入读取格式化数据
fmt.Fscan / Fscanfio.Reader 读取
fmt.Sscan / Sscanf从字符串解析

五、自定义格式化(Stringer 接口)

任何类型实现 String() string 方法后,使用 %v%sPrint 等都会自动调用该方法。

1
2
3
4
type Person struct { Name string; Age int }
func (p Person) String() string {
    return fmt.Sprintf("%s (%d)", p.Name, p.Age)
}

六、性能提示

  • Sprintf 有内存分配开销;频繁调用可考虑 strings.Builder + fmt.Fprintf
  • 类型断言比 %v 反射更快,但对通用代码可接受。
Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计