golang csv处理库推荐使用github.com/gocarina/gocsv,这个库可以根据自动根据结构体标记进行编码
导出
假设数据结构如下:
type Student struct {
Uid int `csv:"uid"`
Name string `csv:"name"`
}
导出样例:
list := []Student{xxx} //数据可以查询出来
content, err := gocsv.MarshalString(&list)
if checkError(err) {
return
}
csvDownload(ctx, "student", content)
写了一个公共的导出函数csvDownload,避免导出乱码,写入utf-8 的bom(Byte Order Mark,字节序标记)
func csvDownload(ctx iris.Context, filename, content string) {
ctx.Header("Content-Type", "application/csv")
ctx.Header("Content-Disposition", fmt.Sprintf("attachment;filename=%s.csv", filename))
ctx.WriteString("\xEF\xBB\xBF") // 写入UTF-8 BOM,防止中文乱码
ctx.WriteString(content)
}
注意:
由于macos系统和windows系统区别,导出的csv的文件编辑后应该保存为utf8格式,由于wps导入编辑不支持编码选择,请使用开源编辑器libreofffice处理
导入
file,_, err := ctx.FormFile("txtImportFile") //txtImportFile 导入文件名
if checkErr(err) {
return
}
list := []Student{}
if err = gocsv.Unmarshal(file, &voices); checkErr(err) { // Load clients from file
return
}
... //后续根据list数据进行数据插入或者更新
有疑问加站长微信联系(非本文作者)