Структурировать данные CSV как строку без создания файла CSV - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть 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"`
}

CSV:

1,2,3
4, ,6

Мне нужна строка CSV, чтобы я мог напрямую загружать строку в виде файла в облачное хранилище через безсерверную среду. Итак, я хочу избежать создания файла в безсерверной среде.

Есть ли какой-нибудь пакет, который может помочь в этом?

Ответы [ 2 ]

2 голосов
/ 06 апреля 2020

Используйте bytes.Buffer для записи данных без создания файла. С bytes.Buffer мы можем записать байты в один буфер, а затем преобразовать в строку, когда закончим, вызывая String() fun c.

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

2 голосов
/ 06 апреля 2020

Вы можете использовать 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...