Я хотел бы распечатать CSV-данные на выходе с мартини. В настоящее время я всегда использовал r.JSON(200, somestruct)
, где r
является render.Render
от github.com/martini-contrib
.Как я могу выводить CSV с мартини?
Теперь у меня есть кусок структур, и я хотел бы напечатать их как CSV (строчить каждое поле одной структуры и печатать одну структуру в одной строке).
В настоящее время я делаю это так:
r.Data(200, []byte("id,Latitude,Longitude\n"))
for _, packet := range tour.Packets {
r.Data(200, []byte(strconv.FormatInt(packet.Id, 10)+","+strconv.FormatFloat(packet.Latitude, 'f', 6, 64)+","+strconv.FormatFloat(packet.Longitude, 'f', 6, 64)+"\n"))
}
Но мне не нравится, как я это сделать по следующим причинам:
- Он загружается напрямую, а не напечатанный на экран.
- Я получаю
http: multiple response.WriteHeader calls
- Я предпочел бы не делать это вручную (структура имеет гораздо больше полей, но все поля являются либо
ìnt64
,float64
илиtime.Time
.
Как можно реализовать вариант экспорта CSV более простым способом?
Вы должны добавить 'wr.Flush()'. Но даже тогда файл автоматически загружается, и подход очень ручной (-> мне нужно вручную добавить каждое поле структуры). –
Да. Если вы хотите общее решение без дополнительной работы для новых полей, вам нужно использовать рефлекс. – Logiraptor
Хорошо. Не могли бы вы расширить свой ответ и показать, как это делается? –