在Golang开发中,处理CSV文件是一项常见任务,无论是数据迁移、报表导出还是日志分析,都可能需要读写CSV格式。Golang标准库自带的encoding/csv包封装了完整的读写逻辑,使用起来简单直接。

读取CSV文件
使用encoding/csv包中的Reader可以逐行读取CSV内容。下面的例子展示如何从本地文件读取数据并打印每一行字段。
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
// 打开CSV文件
f, err := os.Open("data.csv")
if err != nil {
panic(err)
}
defer f.Close()
// 创建CSV读取器
reader := csv.NewReader(f)
// 逐行读取
records, err := reader.ReadAll()
if err != nil {
panic(err)
}
// 遍历输出
for _, row := range records {
fmt.Println(row)
}
}
写入CSV文件
写入操作通过Writer完成,可以调用Write()写单行,或WriteAll()写多行。注意最后要调用Flush()确保数据落盘。
package main
import (
"encoding/csv"
"os"
)
func main() {
f, err := os.Create("out.csv")
if err != nil {
panic(err)
}
defer f.Close()
writer := csv.NewWriter(f)
// 写入多行数据
data := [][]string{
{"name", "age"},
{"张三", "20"},
{"李四", "25"},
}
if err := writer.WriteAll(data); err != nil {
panic(err)
}
// 刷新缓冲区
writer.Flush()
}
常见问题与处理
中文乱码
如果CSV文件使用GBK编码,直接用csv包读取会出现乱码。可借助第三方编码转换库将内容转为UTF-8后再交给Reader处理。
字段内含逗号
CSV标准允许字段用双引号包裹来包含逗号。csv包默认已支持该解析规则,无需额外配置,但写入时要避免手动拼接引号,交由Writer处理即可。
自定义分隔符
若文件并非逗号分隔,可修改Reader和Writer的Comma属性,例如设为分号:
reader := csv.NewReader(f) reader.Comma = ';' writer := csv.NewWriter(f) writer.Comma = ';'
小结
通过encoding/csv包,Golang开发者能够以少量代码完成可靠的CSV读写。掌握Reader、Writer的基本用法以及编码和分隔符相关细节,就能应对大多数业务中的CSV文件操作场景。
GolangCSV文件读写encoding_csv修改时间:2026-07-31 05:39:15