golang 语言中,常用的 fmt 方法有哪些?
在 Go 语言中,fmt
包是处理格式化输入输出的核心库。以下是常用方法分类说明:
一、标准输出方法
go
// 1. 直接输出
fmt.Print("Hello") // 不换行输出
fmt.Println("World") // 输出后自动换行
fmt.Printf("Hi %s", "Bob") // 格式化输出
二、字符串生成方法
go
// 2. 生成格式化字符串
s1 := fmt.Sprint(10) // "10"
s2 := fmt.Sprintf("%04d", 25) // "0025"
s3 := fmt.Sprintln(3.14) // "3.14\n"
三、流式输出方法
go
// 3. 向 io.Writer 写入
file, _ := os.Create("log.txt")
fmt.Fprint(file, "写入文件") // 写入到文件
fmt.Fprintf(os.Stderr, "错误: %v", err) // 输出到标准错误
四、错误格式化
go
// 4. 创建带格式的错误
err := fmt.Errorf("验证失败: 数值 %d 超出范围", 100)
五、输入扫描方法
go
// 5. 输入扫描示例
var name string
fmt.Scan(&name) // 从标准输入读取
var id int
fmt.Sscanf("ID:123", "ID:%d", &id) // 从字符串解析
六、格式化占位符速查
占位符 | 说明 | 示例 |
---|---|---|
%v | 默认格式 | fmt.Printf("%v", time.Now()) → 2025-03-29 14:15:16 |
%+v | 结构体字段名 | %+v → {Name:"Alice", Age:25} |
%#v | Go 语法表示 | %#v → []int{1, 2} |
%T | 类型信息 | fmt.Printf("%T", 5) → int |
%q | 带引号字符串 | fmt.Printf("%q", "go") → "go" |
七、高级用法示例
go
// 表格对齐输出
fmt.Printf("%-15s | %6d\n", "iPhone", 1500) // 左对齐字符串,右对齐数字
// 输出:iPhone | 1500
// 科学计数法
fmt.Printf("%e", 123456789.0) // 1.234568e+08
// 指针地址
ptr := &struct{}{}
fmt.Printf("%p", ptr) // 0x1040a120
最佳实践建议
- 性能敏感场景:优先使用
fmt.Sprint
替代字符串拼接 - 调试输出:使用
%+v
打印结构体更直观 - 跨平台开发:注意
\n
在不同系统的换行处理 - 并发安全:多协程操作时推荐使用
fmt.Fprintf
配合 sync.Mutex
注意:Go 1.18+ 新增了
fmt.Appendf
用于高效追加到字节切片,适合高性能日志场景。