为了账号安全,请及时绑定邮箱和手机立即绑定

GO从结构中循环数据并将其转换为字符串数组以制作CSV

GO从结构中循环数据并将其转换为字符串数组以制作CSV

Go
慕田峪4524236 2022-05-23 15:36:33
我正在尝试将我的数据转换为 CSV。我非常接近。我现在遇到的问题是 CSV Writer 需要一个 [] 字符串。但我无法弄清楚如何将我的数据从结构中获取到一个 [] 字符串中。我正在循环我的 json 数据并将其附加以创建一个新模型。如何让我的模型被接受?import (    "encoding/csv"    "fmt"    "log"    "os"    "strconv"    "time"    "bitbucket.org/exzeo-usa/devops-aws-report/models")func CreateCSV(incidents models.IncidentModel) {    fmt.Println("Creating CSV...")    m := []models.EndModel{}    for i := range incidents.Incidents {        m = append(m, models.EndModel{            IncidentNumber: strconv.Itoa(incidents.Incidents[i].IncidentNumber),            Title:          incidents.Incidents[i].Title,            CreatedAt:      incidents.Incidents[i].CreatedAt,            Notes:          GetNotes(incidents.Incidents[i].IncidentNumber),        })    }    fmt.Print(m)    writeCSV(m)    return}//writeCSV is a function create a .csv filefunc writeCSV(allData []models.EndModel) {    today := time.Now().Format("2006-01-02")    fileString := fmt.Sprintf("result-%v.csv", today)    //Create File    file, err := os.Create(fileString)    checkError("Cannot create file", err)    defer file.Close()    //Create the writer with the file    writer := csv.NewWriter(file)    defer writer.Flush()    //Create and Write to the CSV    err = writer.Write(allData)    checkError("Cannot write to file...", err)}func checkError(message string, err error) {    if err != nil {        log.Fatal(message, err)    }}
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

通常,您不能简单地从一种类型映射到另一种类型并让编译器弄清楚如何转换您的数据。其他语言可能会提供一些语法糖或有一些推断合理默认值的先例,但 Go 故意不提供这种魔法。


您需要明确指出如何将数据结构的每个实例转换为要写为 CSV 行models.EndModel的切片。[]string


类似于以下内容:


// writeCSV is a function create a .csv file

func writeCSV(allData []models.EndModel) {


    today := time.Now().Format("2006-01-02")

    fileString := fmt.Sprintf("result-%v.csv", today)


    //Create File

    file, err := os.Create(fileString)

    checkError("Cannot create file", err)

    defer file.Close()


    // Create the writer with the file

    writer := csv.NewWriter(file)

    defer writer.Flush()


    // Create and Write to the CSV

    csvRows := make([][]string, len(allData))

    for i, model := range allData {

        csvRows[i] = []string{

            // Choose the ordering you wish in your output CSV

            model.IncidentNumber,

            model.Title,

            model.CreatedAt,

            model.Notes,

        }

    }


    // Note that you need to call WriteAll to pass multiple rows

    err = writer.WriteAll(csvRows)

    checkError("Cannot write to file...", err)


}


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信