I'm trying to write a CSV file, I can have 1 to n columns. Currently my data are correctly written except that they are all written on the same column.
I would like to have something like this :
NAME|DESCRIPTION|PRODUCER
name1|desc1|false
name2|desc2|true
name3|desc3|false
Here is my code, a small piece of a switch:
case "companies":
var respToolCompanies entrepriseTool.CompaniesResponse
if jsonErr := json.Unmarshal(resByt, &respToolCompanies); jsonErr != nil {
log.Fatalf("unmarshal: %s", jsonErr)
}
for _, mapping := range mappings {
writeHeader(csvwriter, mapping)
for _, company := range respToolCompanies.Companies {
writeDataAccordinglyToFieldType(mapping, company, csvwriter)
}
csvwriter.Flush()
}
The writeDataAccordinglyToFieldType function:
func writeDataAccordinglyToFieldType(mapping ExportmappingsModel, entities interface{}, csvwriter *csv.Writer) {
switch mapping.SourceColType.String {
case "string":
field := extractFieldValue(entities, mapping)
writeFieldToBuffer(csvwriter, field.String())
case "number":
field := extractFieldValue(entities, mapping)
valInt := field.Int()
str := strconv.Itoa(int(valInt))
writeFieldToBuffer(csvwriter, str)
case "bool":
field := extractFieldValue(entities, mapping)
var boolVal string
if field.Bool() {
boolVal = "true"
} else {
boolVal = "false"
}
writeFieldToBuffer(csvwriter, boolVal)
}
}
And where I write data:
func writeFieldToBuffer(csvwriter *csv.Writer, field string) {
err := csvwriter.Write([]string{field})
if err != nil {
log.Println("Unable to write a line inside the file")
}
}
mappingsvar makes me think you already know which columns to expect, and what type they will be.