go - []map[string]string 到 csv []byte 的惯用转换

标签 go

我有一个接受 io.Reader 的方法,以便进行 http POST(如果需要,我可以更改它),我将向此调用方法提交批量的 x 行。我将行存储为 map[string]string ,以便于检查键是否正确。向当前接受 io.Reader 的调用方法提交 map[string]string slice 的最简化方法是什么?

最佳答案

使用encoding/csv包来生成 CSV 编码。以下是如何将给定列名编码为 []byte:

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))

关于go - []map[string]string 到 csv []byte 的惯用转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25877965/

相关文章:

go - 如何导入一个golang自带的包?

go - 将 slice 从 c 传递给 golang 是否会进行内存复制?

go - 与 golang 中已验证的发件人身份错误不匹配

jquery - 在 Go 模板中包含 js 文件

networking - 从一个端口向另一个端口发送消息

amazon-web-services - 使用 AWS Golang 开发工具包检索 AWS Config 规则名称列表

go - Gin-Gonic (golang) 服务器上的 Axios POST 不工作

golang 在 cmd.Start 启动的进程中处理 kill

go - Go 有 lambda 表达式或类似的东西吗?

go - 为什么 GOPATH 在 go env 中转向“OPATH