ReadAll — small files
r := csv.NewReader(strings.NewReader("name,age\nAda,36\nGrace,85\n"))
records, err := r.ReadAll()
if err != nil { log.Fatal(err) }
for _, row := range records {
fmt.Println(row)
}
Output
[name age]
[Ada 36]
[Grace 85]
Read loop — streaming
Use when the file is large. Returns io.EOF at the end, one row at a time.
r := csv.NewReader(f)
for {
rec, err := r.Read()
if err == io.EOF { break }
if err != nil { log.Fatal(err) }
fmt.Println(rec)
}
Customize delimiter and fields
r := csv.NewReader(f)
r.Comma = ';' // semicolon-separated
r.Comment = '#' // skip comment lines
r.FieldsPerRecord = -1 // allow ragged rows
r.TrimLeadingSpace = true