Fastcsv is a csv parser for golang.
go get -t github.com/willwangcn/fastcsv
-
sep=","If your data uses an alternate delimiter such as ; or \t. -
header=false|trueSet to true if you expect the first line of your CSV to contain headers, alternatly you can specify an array of headers using headers param. You can also specify a sparse array to omit some of the columns. -
columns=slice|nilIf your data doesn't contain header and want to specify the column name.
Notice headers column name must equals struct's field name ignoring case.
Example
type Student struct {
Id int64
Name string
Age int
Lat, Lng float64
}
// right case, if you not config the field, it will not be initialized
headers = []string{"name", "age", "lat"}
headers = []string{"AGE", "NAme", "lng"}
// wrong case
headers = []string{"s_name", "s_age"} data := bytes.NewBuffer([]byte(`
Will,201601101716,18,40.654321,116.25820398331,2016-01-10 23:59:59
Jack,201601101717,50,40.08296,116.316081,1990-01-31 23:59:59
Tony,201601101718,44,40.060394,116.239552,1963-10-10 23:59:59`))
columns := []string{"name", "id", "age", "lat", "lng", "birthday"}
parser := fastcsv.NewFastcsv(data, ",", false, columns)
students, err := parser.ReadAll(Student{})
if err != nil {
panic(err)
}
will := students[0].(Student)
if will.Name != "Will" {
t.Fail()
} f, err := os.Open(filePath)
defer f.Close()
if err != nil {
return
}
columns := []string{"id", "name", "age", "lat", "lng"}
parser, err := fastcsv.NewFastcsv(f, ",", false, headers)
if err != nil {
panic(err)
}
students := parser.ReadAll(Student{})
for _, val := range students {
stu := val.(Student)
fmt.Println(stu)
}