Go 标准库 encoding/csv 提供高效 CSV 读写能力,需注意分隔符、引号、换行、Flush 和 UTF-8 编码(推荐无 BOM)等细节,支持流式处理与错误检查。
Go 语言标准库 encoding/csv 提供了简洁、高效的 CSV 文件读写能力,无需第三方依赖。关键在于理解 csv.Reader 和 csv.Writer 的使用方式,注意编码、分隔符、引号、换行等细节。
取 CSV 文件(按行或按记录)使用 os.Open 打开文件,再传给 csv.NewReader。推荐用 ReadAll() 一次性读取全部数据(适合中小文件),或用循环调用 Read() 逐行处理(适合大文件、流式场景)。
,),如需其他(如制表符),可设置 reader.Comma = '\t'
csv.Reader 默认能正确解析Read() 先读一次获取 header,后续每行用 map[string]string 关联字段用 os.Create 创建文件,包装为 csv.NewWriter。写入前建议调用 writer.Write(header) 写表头。每条记录调用 writer.Write([]string{...}) 即可。
writer.Flush(),否则缓冲区内容可能丢失csv.Writer 会自动加引号并转义,无需手动处理[]string,再写入Go 原生字符串是 UTF-8,只要文件本身保存为 UTF-8(无 BOM 推荐),读写不会乱码。但 Windows 记事本默认保存为 GBK 或带 BOM 的 UTF-8,易出错。
golang.org/x/text/encoding 检测并转换编码(如 GBK → UTF-8),但更稳妥的是统一要求源文件为 UTF-8(无 BOM)\xEF\xBB\xBF)让 Excel 正确识别中文(仅 Windows Excel 需要,非必须)CSV 解析可能在任意行失败(格式错误、字段数不一致等),应始终检查 err。对大文件,避免全量加载到内存,优先用流式读写。
Read() 返回 []string 和 error,空切片 + io.EOF 表示结束csv.NewReader(bufio.NewReader(file)) 包一层可提升小文件读取效率*csv.Writer 独立,且写入时加锁或使用 channel 序列化基本上就这些。标准库够用,逻辑清晰,不复杂但容易忽略 Flush 和编码细节。