// Created on savesnippets.com · https://savesnippets.com/nBuoprdCO3jn3k 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) } }