Quick actions

cmd+k|ctrl+k

Navigation

Languages

Essential Go / CSV

Snippet info

Language

Go

Visibility

public

Author

kkowalczyk

Created

2019-03-26T10:02:19Z

Updated

2019-03-26T10:02:19Z

package main

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

func writeCSV() error {
	f, err := os.Create("stocks_tmp.csv")
	if err != nil {
		return err
	}

	w := csv.NewWriter(f)
	records := [][]string{
		{"date", "price", "name"},
		{"2013-02-08", "15,07", "GOOG"},
		{"2013-02-09", "15,09", "GOOG"},
	}
	for _, rec := range records {
		err = w.Write(rec)
		if err != nil {
			f.Close()
			return err
		}
	}

	// csv.Writer might buffer writes for performance so we must
	// Flush to ensure all data has been written to underlying
	// writer
	w.Flush()

	// Flush doesn't return an error. If it failed to write, we
	// can get the error with Error()
	err = w.Error()
	if err != nil {
		return err
	}
	// Close might also fail due to flushing out buffered writes
	err = f.Close()
	return err
}

func main() {
	writeCSV()
	d, err := ioutil.ReadFile("stocks_tmp.csv")
	if err != nil {
		log.Fatalf("ioutil.ReadAll() failed with '%s'\n", err)
	}
	fmt.Printf("%s\n", string(d))
	os.Remove("stocks_tmp.csv")
}
INFO