【Go语言基础【6】】字符串格式化说明

发布时间:2026/11/3 9:21:52
【Go语言基础【6】】字符串格式化说明

文章目录

    • 零、格式化常用场景
    • 一、Go 字符串格式化核心概念
    • 二、常用格式化占位符
      • 1. 整数类型
      • 2. 浮点数类型
      • 3. 字符串与布尔类型
      • 4. 指针与通用类型
    • 三、宽度与精度控制
      • 1. 宽度控制
      • 2. 精度控制(浮点数/字符串)

零、格式化常用场景

  • 数值转字符串:使用%d、%f等,结合宽度和精度控制输出格式。
  • 日志输出:用%v或%+v快速打印结构体或复杂类型。
  • 国际化字符处理:通过%c、%U处理 Unicode 字符,注意编码格式(UTF-8/UTF-16)。


常见错误说明

  1. 类型不匹配:go fmt.Printf("%d", "abc") // 报错:%!d(string=abc)
  2. 参数数量错误:go fmt.Printf("%d", 1, 2) // 报错:%!(EXTRA int=2)
  3. 宽度/精度非整数:go fmt.Printf("%2.3s", "abc") // 报错:%!(BADPREC)

一、Go 字符串格式化核心概念

Go 语言通过fmt包实现字符串格式化,核心函数包括:

  • fmt.Printf(format string, a ...any):按指定格式输出到控制台。
  • fmt.Sprintf(format string, a ...any) string:返回格式化后的字符串。
  • fmt.Fprintf(w io.Writer, format string, a ...any):输出到指定写入器(如文件)。

格式化语法:
以%开头的占位符,后跟格式标识符(如%d、%s),可附加宽度、精度等修饰符。

二、常用格式化占位符

1. 整数类型

占位符说明示例(a = 255)输出
%b二进制fmt.Printf("%b", a)11111111
%o八进制fmt.Printf("%o", a)377
%d十进制fmt.Printf("%d", a)255
%x十六进制(小写)fmt.Printf("%x", a)ff
%X十六进制(大写)fmt.Printf("%X", a)FF
%cUnicode 字符(码点转字符)fmt.Printf("%c", 20013)中
%UUnicode 格式(带U+前缀)fmt.Printf("%U", '中')U+4E2D

2. 浮点数类型

占位符说明示例(f = 123.456)输出
%e科学计数法(小写 e)fmt.Printf("%e", f)1.234560e+02
%E科学计数法(大写 E)fmt.Printf("%E", f)1.234560E+02
%f固定小数位(默认 6 位)fmt.Printf("%f", f)123.456000
%g自动选择紧凑格式fmt.Printf("%g", f)123.456
%G类似%g(大写 E)fmt.Printf("%G", f)123.456

3. 字符串与布尔类型

占位符说明示例(str = "Go语言")输出
%s原始字符串fmt.Printf("%s", str)Go语言
%q带双引号的转义字符串fmt.Printf("%q", str)"Go语言"
%x十六进制(小写)fmt.Printf("%x", str)476fe8afad
%t布尔值(true/false)fmt.Printf("%t", true)true

4. 指针与通用类型

占位符说明示例(a := 10; ptr := &a)输出
%p指针地址(十六进制,带0x)fmt.Printf("%p", ptr)0xc00001a0b8
%v默认格式fmt.Printf("%v", []int{1,2,3}[1 2 3]
%+v带字段名的结构体格式fmt.Printf("%+v", user){Name:laowang Age:33}
%#vGo 语法表示fmt.Printf("%#v", user)main.User{Name:"laowang", Age:33}
%T类型信息fmt.Printf("%T", user)main.User
%%字面量%fmt.Printf("%%")%

三、宽度与精度控制

1. 宽度控制

  • 基本格式:%[宽度]s(宽度为整数,默认右对齐,负数为左对齐)。
    fmt.Printf("|%5s|","ab")// 右对齐,宽度5 → "| ab|"fmt.Printf("|%-5s|","ab")// 左对齐,宽度5 → "|ab |"
  • 补零填充:%[宽度]d或%0[宽度]d(宽度不足时补零)。
    fmt.Printf("%03d",5)// 补零至3位 → "005"

2. 精度控制(浮点数/字符串)

  • 浮点数精度:%[宽度].[精度]f(精度指小数位数)。
    fmt.Printf("%.2f",123.456)// 保留2位小数 → "123.46"
  • 字符串截断:%.[长度]s(超出长度则截断)。
    fmt.Printf("%.3s","Hello")// 截断至3字符 → "Hel"