将 CSV 数据构造为字符串,而不创建 CSV 文件

max*_*ax 2 csv go

我有一个struct我想将其转换为 CSV 字符串。我不必编写 CSV 文件。我只需要创建 CSV 字符串。

Go CSV 包(https://golang.org/pkg/encoding/csv/)仅提供写入功能。

这是struct

type myData struct {
    A string `json:"a"`
    B string `json:"b"`
    C string `json:"c"`
}
Run Code Online (Sandbox Code Playgroud)

CSV:

1,2,3
4, ,6
Run Code Online (Sandbox Code Playgroud)

我想要一个 CSV 字符串,以便我可以通过无服务器环境直接将该字符串作为文件上传到云存储中。因此,我想避免在无服务器环境中创建文件。

有没有任何软件包可以帮助做到这一点?

Aze*_*eem 11

您可以用来bytes.Buffer写入 CSV 数据并获取如下字符串(live):

package main

import (
    "bytes"
    "encoding/csv"
    "fmt"
    "log"
)

func main() {
    pairs := [][]string{
        {"k1", "v1"},
        {"k2", "v2"},
    }

    b := new(bytes.Buffer)
    w := csv.NewWriter(b)

    w.WriteAll(pairs)

    if err := w.Error(); err != nil {
        log.Fatal(err)
    }

    s := b.String()

    fmt.Println(s)
}
Run Code Online (Sandbox Code Playgroud)


Ekl*_*vya 5

用于bytes.Buffer写入数据而不创建文件。我们bytes.Buffer可以将字节写入单个缓冲区,然后在调用函数完成后将其转换为字符串String()

var csvData = [][]string{
      {"SuperHero Name", "Power", "Weakness"},
      {"Batman", "Wealth", "Human"},
      {"Superman", "Strength", "Kryptonite"},
   }
buf := new(bytes.Buffer)
wr := csv.NewWriter(buf)
w.WriteAll(csvData)
csvString := buf.String()

Run Code Online (Sandbox Code Playgroud)