fmt.Sprintf
是 Go 语言中用于 格式化字符串 的核心函数,其作用是将数据按指定格式转换为字符串。以下是详细用法:
基本语法
result := fmt.Sprintf("格式化模板", 参数1, 参数2, ...)
- 返回值:生成的字符串(不会打印到控制台,需用 fmt.Printf 才会输出)
- 模板规则:以 % 开头的动词(如 %s, %d)会被后续参数替换
- 常用格式动词
动词 作用 示例
QQ20250220-164239.jpg
高级用法
1. 宽度与精度
整数宽度:%5d
→ 至少占5字符(右对齐)
fmt.Sprintf("%5d", 123) // " 123"(左侧补空格)
浮点数精度:%6.2f
→ 总宽度6,小数2位,使用此方法控制数字精度
fmt.Sprintf("%6.2f", 3.1415) // " 3.14"
2. 补零与对齐
补零:%05d
→ 宽度5,不足补零
fmt.Sprintf("%05d", 42) // "00042"
左对齐:%-5d
→ 宽度5,左对齐
fmt.Sprintf("%-5d", 42) // "42 "
3. 索引参数
通过 [n] 指定参数位置(索引从1开始):
fmt.Sprintf("%s %s", "World", "Hello") // "Hello World"
实际示例
1. 混合类型拼接
name := "Alice"
age := 30
height := 165.5
output := fmt.Sprintf("姓名: %s, 年龄: %d岁, 身高: %.1fcm", name, age, height)
// 输出: "姓名: Alice, 年龄: 30岁, 身高: 165.5cm"
2. 格式化数值
price := 99.9
discount := 0.2
msg := fmt.Sprintf("原价: ¥%6.2f → 折扣价: ¥%05.2f", price, price*discount)
// 输出: "原价: ¥ 99.90 → 折扣价: ¥19.98"
3. 生成日志
err := errors.New("文件未找到")
log := fmt.Sprintf("[ERROR] %s (时间: %v)", err.Error(), time.Now().Format("2006-01-02 15:04:05"))
// 输出: "[ERROR] 文件未找到 (时间: 2025-02-20 16:30:00)"
注意事项
参数顺序匹配:占位符数量必须与参数数量一致,否则会运行时错误
// 错误示例
fmt.Sprintf("%s %d", "test") // 缺少参数 → panic
类型安全:占位符类型需与参数类型兼容
// 错误示例
fmt.Sprintf("%d", "123") // 字符串无法用 %d → panic
性能问题:频繁调用 fmt.Sprintf 时建议改用strings.Builder
或strconv