Go语言通过encoding/csv包高效处理CSV文件读写。首先使用os.Open打开文件,结合csv.NewReader读取数据,可调用ReadAll()一次性读取或Read()逐行读取以节省内存;写入时用os.Create创建文件,csv.NewWriter写入数据,需注意调用Flush()确保数据落盘;支持自定义分隔符,如设置Comma=';'处理分号分隔文件,适用于欧洲格式CSV,广泛用于配置、报表等场景。

Go语言通过标准库
encoding/csv提供了对CSV文件的读取和写入支持,使用简单且高效。下面通过具体示例展示如何用Golang处理CSV文件。
读取CSV文件
使用
csv.NewReader可以从文件或任意
io.Reader中读取CSV数据。通常配合
os.Open打开本地文件。
示例:读取一个名为
data.csv的文件内容: // 导入必要包
import (
"encoding/csv"
"os"
"fmt"
)
// 打开CSV文件
file, err := os.Open("data.csv")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// 创建csv reader
reader := csv.NewReader(file)
// 读取所有记录
records, err := reader.ReadAll()
if err != nil {
log.Fatal(err)
}
// 遍历输出每行
for _, record := range records {
fmt.Println(record)
}
如果想逐行读取以节省内存(适合大文件),可使用
Read()方法:
立即学习“go语言免费学习笔记(深入)”;
record, err := reader.Read()for err == nil {
fmt.Println(record)
record, err = reader.Read()
}
写入CSV文件
使用
csv.NewWriter可以将数据写入文件或任何
io.Writer目标。
示例:创建并写入
output.csv文件:
file, err := os.Create("output.csv")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// 创建csv writer
writer := csv.NewWriter(file)
defer writer.Flush() // 确保数据写入磁盘
// 要写入的数据
data := [][]string{
{"Name", "Age", "City"},
{"Alice", "25", "Beijing"},
{"Bob", "30", "Shanghai"},
}
// 逐行写入
for _, row := range data {
err := writer.Write(row)
if err != nil {
log.Fatal(err)
}
}
注意:调用
writer.Flush()非常重要,否则缓冲区中的数据不会真正写入文件。
自定义分隔符
默认情况下,
csv.Reader和
csv.Writer使用逗号作为字段分隔符。若需使用其他字符(如分号或制表符),可手动设置。
例如,处理以分号分隔的CSV:
reader := csv.NewReader(file)reader.Comma = ';'
writer := csv.NewWriter(file)
writer.Comma = ';'
常见场景包括欧洲格式CSV常使用
;避免与小数点
,冲突。
基本上就这些。利用
encoding/csv包,Golang能轻松完成结构化文本数据的导入导出,适合配置、报表或数据迁移等任务。










