Skip to content
No description, website, or topics provided.
Go
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
example
README.md
csvheader_test.go
csvhelper.go
decoder.go
decoder_test.go
encoder.go
encoder_test.go
row.go
rowmap.go
rowslice.go
utils.go
utils_test.go

README.md

csvhelper

csvhelper is a CSV Marshal/Unmarshal library to aid with encoding and decoding CSV files

Installation and setup

  1. Download using, go get github.com/hatchify/csvhelper
  2. Import wherever csvhelper is needed
  3. Adapt all intended structs to Encodee's and Decodee's (depending on if you need Marshaling and/or Unmarshaling)

Note: Please see the usage section and/or the example directory for a basic use-case for marshaling and unmarshaling.

Usage

package main

import (
	"bytes"
	"log"
	"strconv"

	"github.com/hatchify/csvhelper"
)

func main() {
	var (
		u   User
		enc *csvhelper.Encoder
		dec *csvhelper.Decoder
		err error
	)

	u.FirstName = "John"
	u.LastName = "Doe"
	u.Age = 32
	u.City = "Portland"
	u.State = "Oregon"

	buf := bytes.NewBuffer(nil)
	header := csvhelper.Row{
		"first_name",
		"last_name",
		"age",
		"city",
		"state",
	}

	if enc, err = csvhelper.NewEncoder(buf, header); err != nil {
		log.Fatal(err)
	}

	if err = enc.Encode(&u); err != nil {
		log.Fatal(err)
	}

	if dec, err = csvhelper.NewDecoder(buf); err != nil {
		log.Fatal(err)
	}

	var nu User
	if err = dec.Decode(&nu); err != nil {
		log.Fatal(err)
	}

	if u != nu {
		log.Fatalf("values do not match, expected %#v and received %#v", u, nu)
	}
}

// User represents a user
type User struct {
	FirstName string
	LastName  string
	Age       int
	City      string
	State     string
}

// MarshalCSV is a marshaling helper function
func (u *User) MarshalCSV(key string) (value string, err error) {
	switch key {
	case "first_name":
		value = u.FirstName
	case "last_name":
		value = u.LastName
	case "age":
		value = strconv.Itoa(u.Age)
	case "city":
		value = u.City
	case "state":
		value = u.State
	}

	return
}

// UnmarshalCSV is a unmarshaling helper function
func (u *User) UnmarshalCSV(key, value string) (err error) {
	switch key {
	case "first_name":
		u.FirstName = value
	case "last_name":
		u.LastName = value
	case "age":
		u.Age, err = strconv.Atoi(value)
	case "city":
		u.City = value
	case "state":
		u.State = value
	}

	return
}
You can’t perform that action at this time.