我有一个接受io.Reader的方法,以便进行http POST(如果需要,我可以更改它)我将向这个调用方法提交批量的x行。我将我的行存储为map [string]字符串,以便于检查密钥是否正确。将一片map [string]字符串提交给当前接受io.Reader的调用方法的最简化方法是什么?
答案 0 :(得分:3)
使用encoding/csv包生成CSV编码。以下是给定列名称编码为[]字节的方法:
func encodeCSV(columns []string, rows []map[string]string) ([]byte, error) {
var buf bytes.Buffer
w := csv.NewWriter(&buf)
if err := w.Write(columns); err != nil {
return nil, err
}
r := make([]string, len(columns))
for _, row := range rows {
for i, column := range columns {
r[i] = row[column]
}
if err := w.Write(r); err != nil {
return nil, err
}
}
if err := w.Flush(); err != nil {
return nil, err
}
return buf.Bytes(), nil
}
使用bytes.NewReader为帖子创建正文:
data, err := encodeCSV(coluns, rows)
if err != nil {
// handle error
}
req, err := http.NewRequest("POST", url, bytes.NewReader(data))
如果您可以控制数据格式,请考虑使用JSON:
data, err := json.Marshal(rows)
if err != nil {
// handle error
}
req, err := http.NewRequest("POST", url, bytes.NewReader(data))