go-csv-tag
                                
                                
                                
                                    go-csv-tag copied to clipboard
                            
                            
                            
                        Read csv file from go using tags
go-csv-tag
Read csv file from Go using tags
The project is in maintenance mode.
It is kept compatible with changes in the Go ecosystem but no new features will be developed. PR could be accepted.
Install
go get github.com/artonge/go-csv-tag/v2
Example
Load
The csv file:
name, ID, number
name1, 1, 1.2
name2, 2, 2.3
name3, 3, 3.4
Your Go code:
type Demo struct {                                // A structure with tags
	Name string  `csv:"name"`
	ID   int     `csv:"ID"`
	Num  float64 `csv:"number"`
}
tab := []Demo{}                                   // Create the slice where to put the content
err  := csvtag.LoadFromPath(
	"file.csv",                                   // Path of the csv file
	&tab,                                         // A pointer to the create slice
	csvtag.CsvOptions{                            // Load your csv with optional options
		Separator: ';',                           // changes the values separator, default to ','
		Header: []string{"name", "ID", "number"}, // specify custom headers
})
You can also load the data from an io.Reader with:
csvtag.LoadFromReader(youReader, &tab)
Or from a string with:
csvtag.LoadFromString(yourString, &tab)
Dump
Your Go code:
type Demo struct {                         // A structure with tags
	Name string  `csv:"name"`
	ID   int     `csv:"ID"`
	Num  float64 `csv:"number"`
}
tab := []Demo{                             // Create the slice where to put the content
	Demo{
		Name: "some name",
		ID: 1,
		Num: 42.5,
	},
}
err := csvtag.DumpToFile(tab, "csv_file_name.csv")
You can also dump the data into an io.Writer with:
err := csvtag.DumpToWriter(tab, yourIOWriter)
Or dump to a string with:
str, err := csvtag.DumpToString(tab)
The csv file written:
name,ID,number
some name,1,42.5