Skip to content

Instantly share code, notes, and snippets.

@Xe
Created March 9, 2017 02:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Xe/9a00369c4085f5fa31d28ba55301534d to your computer and use it in GitHub Desktop.
Save Xe/9a00369c4085f5fa31d28ba55301534d to your computer and use it in GitHub Desktop.
package main
import (
"compress/gzip"
"encoding/csv"
"flag"
"log"
"os"
)
// GZippedCSVWriter combines a file, gz writer, and csv writer
type GZippedCSVWriter struct {
fout *os.File
gw *gzip.Writer
*csv.Writer
}
func NewGzippedCSVWriter(fname string) (*GZippedCSVWriter, error) {
fout, err := os.Create(fname)
if err != nil {
return nil, err
}
gzwr := gzip.NewWriter(fout)
csvwriter := csv.NewWriter(gzwr)
return &GZippedCSVWriter{
fout: fout,
gw: gzwr,
Writer: csvwriter,
}, nil
}
func (gz *GZippedCSVWriter) Close() error {
gz.Flush()
err := gz.gw.Close()
if err != nil {
return err
}
err = gz.fout.Close()
if err != nil {
return err
}
return nil
}
var (
fname = flag.String("fname", "", "output fname")
)
func main() {
out, err := NewGzippedCSVWriter(*fname)
if err != nil {
log.Fatal(err)
}
out.Write([]string{"doom", "doom", "doom"})
err = out.Close()
if err != nil {
log.Fatal(err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment