encoding/csv.Writer.WriteAll în Go

Scrie toate rândurile date deodată și apelează singur Flush; returnează eroarea, dacă apare.

Sintaxă
func (w *Writer) WriteAll(records [][]string) error

Ce face encoding/csv.Writer.WriteAll

cw.WriteAll(randuri) scrie fiecare rând cu Write și la final apelează Flush, apoi returnează eroarea. Este cea mai scurtă variantă când ai deja toate datele în memorie.

Pentru exporturi mari, generate pe parcurs (de exemplu rânduri citite dintr-o bază de date), folosește Write în buclă și Flush la final, ca să nu ții tot în memorie.

Parametri

Parametru Descriere
records Rândurile, ca [][]string.

Ce returnează

Eroarea primei scrieri eșuate sau nil.

Exemple

Exemplul 1: Tabel scris dintr-o dată

package main

import (
	"encoding/csv"
	"fmt"
	"os"
)

func main() {
	randuri := [][]string{
		{"oras", "judet", "populatie"},
		{"Iași", "IS", "271692"},
		{"Cluj-Napoca", "CJ", "286598"},
		{"Timișoara", "TM", "250849"},
	}
	if err := csv.NewWriter(os.Stdout).WriteAll(randuri); err != nil {
		fmt.Println("eroare:", err)
	}
}

Rezultat

oras,judet,populatie
Iași,IS,271692
Cluj-Napoca,CJ,286598
Timișoara,TM,250849

Exemplul 2: CSV descărcat dintr-un handler HTTP

package main

import (
	"encoding/csv"
	"fmt"
	"net/http"
	"net/http/httptest"
)

func export(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "text/csv; charset=utf-8")
	w.Header().Set("Content-Disposition", `attachment; filename="clienti.csv"`)
	csv.NewWriter(w).WriteAll([][]string{
		{"id", "nume", "email"},
		{"1", "Ana Pop", "ana@example.ro"},
		{"2", "Dan Ilie", "dan@example.ro"},
	})
}

func main() {
	rec := httptest.NewRecorder()
	export(rec, httptest.NewRequest("GET", "/export", nil))
	fmt.Println(rec.Header().Get("Content-Type"))
	fmt.Print(rec.Body.String())
}

Rezultat

text/csv; charset=utf-8
id,nume,email
1,Ana Pop,ana@example.ro
2,Dan Ilie,dan@example.ro

Greșeli frecvente

  • Ignori eroarea returnată (de exemplu disc plin): fișierul pare salvat, dar este incomplet.

Comenzi înrudite

  • encoding/csv.Writer: Scrie fișiere CSV: Write adaugă un rând (cu ghilimele unde e nevoie), Flush trimite datele din buffer la destinație.
  • encoding/csv.Reader.ReadAll: Citește toate rândurile rămase dintr-un CSV deodată, ca [][]string; potrivit pentru fișiere mici.