Skip to content

Instantly share code, notes, and snippets.

@miguelmota
Last active August 18, 2023 16:16
Show Gist options
  • Save miguelmota/0a3f3339141f336833ecd62de1e8539b to your computer and use it in GitHub Desktop.
Save miguelmota/0a3f3339141f336833ecd62de1e8539b to your computer and use it in GitHub Desktop.
Golang CSV write example
package main
import (
"encoding/csv"
"log"
"os"
)
func main() {
records := [][]string{
{"first_name", "last_name", "username"},
{"Rob", "Pike", "rob"},
{"Ken", "Thompson", "ken"},
{"Robert", "Griesemer", "gri"},
}
w := csv.NewWriter(os.Stdout)
for _, record := range records {
if err := w.Write(record); err != nil {
log.Fatalln("error writing record to csv:", err)
}
}
// Write any buffered data to the underlying writer (standard output).
w.Flush()
if err := w.Error(); err != nil {
log.Fatal(err)
}
}
@miguelmota
Copy link
Author

You can use bytes.NewBuffer to write to a bytes buffer:

package main

import (
	"bytes"
	"encoding/csv"
	"fmt"
	"log"
)

func main() {
	records := [][]string{
		{"first_name", "last_name", "username"},
		{"Rob", "Pike", "rob"},
		{"Ken", "Thompson", "ken"},
		{"Robert", "Griesemer", "gri"},
	}

	var b []byte
	buf := bytes.NewBuffer(b)
	w := csv.NewWriter(buf)

	for _, record := range records {
		if err := w.Write(record); err != nil {
			log.Fatalln("error writing record to csv:", err)
		}
	}

	w.Flush()
	if err := w.Error(); err != nil {
		log.Fatal(err)
	}

	fmt.Println(string(buf.Bytes()))
}

@Elijas
Copy link

Elijas commented Nov 29, 2022

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment