Csv2 is a lightweight Golang module for reading CSV files as individual rows or as a table.
Install package.
go get github.com/cinar/csv2
Import Csv2.
import (
"github.com/cinar/csv2"
)
Given that the CSV file contains the following columns.
date,close,high,low,open,volume,adjClose,adjHigh,adjLow,adjOpen,adjVolume,divCash,splitFactor
2015-09-18 00:00:00+00:00,43.48,43.99,43.33,43.5,63143684,39.5167038561,39.9802162518,39.3803766809,39.534880812800004,63143684,0.0,1.0
Define a structure for each individual row.
// Daily price structure for each row.
type dailyPrice struct {
Date time.Time `format:"2006-01-02 15:04:05-07:00"`
Close float64
High float64
Low float64
Open float64
Volume int64
AdjClose float64
AdjHigh float64
AdjLow float64
AdjOpen float64
AdjVolume int64
DivCash float64
SplitFactor float64
}
Csv2 allows you to associate additional information about the colums through the tags. The following additional information is currently supported.
Tag | Description | Example |
---|---|---|
header | Column header for the field. | header:"Date" |
format | Date format for parsing. | format:"2006-01-02 15:04:05-07:00" |
Define an instance of a slice of row structure.
var prices []dailyPrice
Use the ReadRowsFromFile function to read the CSV file into the slice.
err := csv2.ReadRowsFromFile(testFile, true, &prices)
if err != nil {
return err
}
Define a structure for the table.
// Stock prices structure for all columns.
type stockPrices struct {
Date []time.Time `format:"2006-01-02 15:04:05-07:00"`
Close []float64
High []float64
Low []float64
Open []float64
Volume []int64
AdjClose []float64
AdjHigh []float64
AdjLow []float64
AdjOpen []float64
AdjVolume []int64
DivCash []float64
SplitFactor []float64
}
Define an instance of the table structure.
prices := stockPrices{}
Use the ReadTableFromFile function to read the CSV file into the table.
err := csv2.ReadTableFromFile(testFile, true, &prices)
if err != nil {
t.Fatal(err)
}
The source code is provided under MIT License.