sprintf
是 C 语言中的字符串格式化函数,在 Go 语言中对应的是 fmt.Sprintf
。以下是详细用法:
Go 语言中的 fmt.Sprintf
基本语法
go
fmt.Sprintf(format string, a ...interface{}) string
常用格式说明符
1. 字符串格式化
go
name := "张三"
age := 25
result := fmt.Sprintf("姓名:%s,年龄:%d", name, age)
// 输出:姓名:张三,年龄:25
2. 数字格式化
go
// 整数
num := 42
result := fmt.Sprintf("数字:%d", num) // 十进制
result = fmt.Sprintf("十六进制:%x", num) // 小写十六进制
result = fmt.Sprintf("十六进制:%X", num) // 大写十六进制
result = fmt.Sprintf("八进制:%o", num) // 八进制
result = fmt.Sprintf("二进制:%b", num) // 二进制
// 浮点数
price := 123.456
result = fmt.Sprintf("价格:%.2f", price) // 保留2位小数
result = fmt.Sprintf("价格:%f", price) // 默认精度
result = fmt.Sprintf("科学计数:%e", price) // 科学计数法
3. 宽度和精度控制
go
num := 42
result := fmt.Sprintf("右对齐:%5d", num) // 宽度5,右对齐
result = fmt.Sprintf("左对齐:%-5d", num) // 宽度5,左对齐
result = fmt.Sprintf("补零:%05d", num) // 宽度5,用0填充
price := 123.456
result = fmt.Sprintf("价格:%8.2f", price) // 宽度8,精度2
4. 布尔值和指针
go
flag := true
result := fmt.Sprintf("状态:%t", flag) // 布尔值
ptr := &flag
result = fmt.Sprintf("指针:%p", ptr) // 指针地址
5. 通用格式
go
value := 42
result := fmt.Sprintf("通用格式:%v", value) // 默认格式
result = fmt.Sprintf("详细格式:%+v", value) // 详细格式
result = fmt.Sprintf("类型信息:%T", value) // 类型信息
实际应用示例
1. 数据库连接字符串(你代码中的用法)
go
dbHost := "localhost"
dbPort := "3306"
dbUser := "root"
dbPass := "password"
dbName := "testdb"
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
dbUser, dbPass, dbHost, dbPort, dbName)
// 输出:root:password@tcp(localhost:3306)/testdb?charset=utf8mb4&parseTime=True&loc=Local
2. 文件路径拼接
go
basePath := "/home/user"
filename := "data.txt"
fullPath := fmt.Sprintf("%s/%s", basePath, filename)
3. 日志格式化
go
level := "INFO"
message := "用户登录成功"
timestamp := "2024-01-01 12:00:00"
log := fmt.Sprintf("[%s] %s - %s", timestamp, level, message)
4. 错误信息格式化
go
err := errors.New("连接失败")
result := fmt.Sprintf("操作失败:%v", err)
常用格式说明符总结
说明符 | 类型 | 说明 |
---|---|---|
%s |
string | 字符串 |
%d |
int | 十进制整数 |
%f |
float | 浮点数 |
%t |
bool | 布尔值 |
%p |
pointer | 指针 |
%v |
interface{} | 默认格式 |
%+v |
interface{} | 详细格式 |
%T |
interface{} | 类型信息 |
%x |
int | 十六进制(小写) |
%X |
int | 十六进制(大写) |
%o |
int | 八进制 |
%b |
int | 二进制 |
注意事项
- 参数顺序:格式说明符的顺序必须与参数顺序一致
- 类型匹配:确保格式说明符与参数类型匹配
- 性能 :对于简单字符串拼接,
+
操作符可能比fmt.Sprintf
更快 - 错误处理 :
fmt.Sprintf
不会返回错误,但格式错误可能导致意外输出
这就是 fmt.Sprintf
的主要用法,它是 Go 语言中非常实用的字符串格式化工具!