共计 1197 个字符,预计需要花费 3 分钟才能阅读完成。
在日常开发中,针对数据导出,咱们能够导出 Excel 格局,然而如果是针对大数据量的导出,间接导出为 Excel 格局可能须要占用大量内存,且导出速度很慢。这个时候咱们就须要导出为 CSV 格局。
CSV 格局
CSV 实质上是文本文件,该文件有以下要求:
- 列之间用逗号分隔,行之间用换行分隔
- 单元格如果有逗号、引号之类的字符,该单元格须要应用双引号括起来
- 如果内容蕴含中文,间接输入可能会乱码
实现形式
golang 官网有 csv 的库,能够很容易的实现 csv 数据的写入。
golang 实现 csv 数据写文件
func main() {f, err := os.Create("data.csv")
if err != nil {panic(err)
}
defer f.Close()
f.WriteString("xEFxBBxBF") // 写入 UTF-8 BOM,防止应用 Microsoft Excel 关上乱码
writer := csv.NewWriter(f)
writer.Write([]string{"编号", "姓名", "年龄"})
writer.Write([]string{"1", "张三", "23"})
writer.Write([]string{"2", "李四", "24"})
writer.Write([]string{"3", "王五", "25"})
writer.Write([]string{"4", "赵六", "26"})
writer.Flush() // 此时才会将缓冲区数据写入}
golang 实现 web 导出 csv 数据
此处以 gin 框架为例,如果用的 go 官网 web 库,其实差不多是一样的:
func ExportCsv(c *gin.Context) {bytesBuffer := &bytes.Buffer{}
bytesBuffer.WriteString("xEFxBBxBF") // 写入 UTF-8 BOM,防止应用 Microsoft Excel 关上乱码
writer := csv.NewWriter(bytesBuffer)
writer.Write([]string{"编号", "姓名", "年龄"})
writer.Write([]string{"1", "张三", "23"})
writer.Write([]string{"2", "李四", "24"})
writer.Write([]string{"3", "王五", "25"})
writer.Write([]string{"4", "赵六", "26"})
writer.Flush() // 此时才会将缓冲区数据写入
// 设置下载的文件名 c.Writer.Header().Set("Content-Disposition", "attachment;filename=data.csv")
// 设置文件类型以及输入数据 c.Data(http.StatusOK, "text/csv", bytesBuffer.Bytes())
return
}
正文完