文章目录
- 零、格式化常用场景
- 一、Go 字符串格式化核心概念
- 二、常用格式化占位符
- 1. 整数类型
- 2. 浮点数类型
- 3. 字符串与布尔类型
- 4. 指针与通用类型
- 三、宽度与精度控制
- 1. 宽度控制
- 2. 精度控制(浮点数/字符串)
零、格式化常用场景
- 数值转字符串:使用
%d
、%f
等,结合宽度和精度控制输出格式。 - 日志输出:用
%v
或%+v
快速打印结构体或复杂类型。 - 国际化字符处理:通过
%c
、%U
处理 Unicode 字符,注意编码格式(UTF-8/UTF-16)。
常见错误说明
- 类型不匹配:
go fmt.Printf("%d", "abc") // 报错:%!d(string=abc)
- 参数数量错误:
go fmt.Printf("%d", 1, 2) // 报错:%!(EXTRA int=2)
- 宽度/精度非整数:
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 |
%c | Unicode 字符(码点转字符) | fmt.Printf("%c", 20013) | 中 |
%U | Unicode 格式(带 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} |
%#v | Go 语法表示 | 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"