package table import ( "fmt" "io" ) type CSVPrinter struct { writer io.Writer } // Headers specify the table headers func (p *CSVPrinter) Headers(headers ...string) error { for _, header := range headers { if _, err := fmt.Fprintf(p.writer, "%s,", header); err != nil { return err } } _, err := fmt.Fprintf(p.writer, "\n") return err } // Fields add another row func (p *CSVPrinter) Fields(fields ...interface{}) error { for _, field := range fields { if _, err := fmt.Fprintf(p.writer, "%v,", field); err != nil { return err } } _, err := fmt.Fprintf(p.writer, "\n") return err } func (p *CSVPrinter) StringFields(fields ...string) error { for _, field := range fields { if _, err := fmt.Fprintf(p.writer, "%v,", field); err != nil { return err } } _, err := fmt.Fprintf(p.writer, "\n") return err } // Flush implements the flush interface but for CVS printer is a noop func (p *CSVPrinter) Flush() error { return nil }