Csv 写入和导出
go的标准库
"encoding/csv"
写入
f, err := os.Create(export.GetExcelFullPath() + "test.csv")
if err != nil {
panic(err)
}
defer f.Close()
f.WriteString("\xEF\xBB\xBF")
w := csv.NewWriter(f)
data := [][]string{
{"1", "test1", "test1-1"},
{"2", "test2", "test2-1"},
{"3", "test3", "test3-1"},
}
w.WriteAll(data)
在 Go 提供的标准库 encoding/csv 中,天然的支持 csv 文件的读取和处理,在本段代码中,做了如下工作:
1、os.Create:
创建了一个 test.csv
文件
2、f.WriteString("\xEF\xBB\xBF”)
:
\xEF\xBB\xBF
是 UTF-8 BOM
的 16 进制格式,在这里的用处是标识文件的编码格式,通常会出现在文件的开头,因此第一步就要将其写入。如果不标识 UTF-8 的编码格式的话,写入的汉字会显示为乱码
3、csv.NewWriter:
func NewWriter(w io.Writer) *Writer {
return &Writer{
Comma: ',',
w: bufio.NewWriter(w),
}
}
4、w.WriteAll:
func (w *Writer) WriteAll(records [][]string) error {
for _, record := range records {
err := w.Write(record)
if err != nil {
return err
}
}
return w.w.Flush()
}
WriteAll 实际是对 Write 的封装,需要注意在最后调用了 w.w.Flush()
,这充分了说明了 WriteAll 的使用场景,你可以想想作者的设计用意