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.