在平常開發中,針對數據導出,咱們能夠導出Excel格式,可是若是是針對大數據量的導出,直接導出爲Excel格式可能須要佔用大量內存,且導出速度很慢。這個時候咱們就須要導出爲CSV格式。golang
CSV本質上是文本文件,該文件有如下要求:web
golang 官方有csv的庫,能夠很容易的實現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() // 此時纔會將緩衝區數據寫入 }
此處以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 }