Go

CSV Read/Write with encoding/csv

admin by @admin ADMIN
1d ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
`encoding/csv` parses RFC 4180 CSVs. Read row-by-row with `Read()` or all at once with `ReadAll()`. Same for writing — flush with `Writer.Flush()` before closing.
Go
Raw
package main

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

func main() {
    // Read row-by-row (low memory)
    f, _ := os.Open("users.csv")
    defer f.Close()
    r := csv.NewReader(f)
    for {
        record, err := r.Read()
        if err == io.EOF { break }
        if err != nil    { log.Fatal(err) }
        fmt.Println(record)                       // []string{"id","name","email"}
    }

    // Write CSV
    out, _ := os.Create("export.csv")
    defer out.Close()
    w := csv.NewWriter(out)
    defer w.Flush()                                // CRUCIAL — buffered

    w.Write([]string{"id", "name", "email"})
    w.Write([]string{"1", "Alice", "a@x.com"})
    w.Write([]string{"2", "Bob",   "b@x.com"})

    // For huge writes, also check w.Error() after Flush()
    if err := w.Error(); err != nil { log.Fatal(err) }
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.