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

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

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

Go
慕田峪7331174 2023-08-21 14:06:54
我正在尝试将我的数据放入 CSV 中。我非常接近。我现在遇到的问题是 CSV 编写器需要一个 [] 字符串。但我不知道如何将我的数据从结构中获取到一个 [] 字符串中。我正在循环遍历 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 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

一般来说,您不能简单地从一种类型映射到另一种类型并让编译器弄清楚如何转换数据。其他语言可能会提供一些语法糖或有一些推断合理默认值的先例,但 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)


}


查看完整回答
反对 回复 2023-08-21
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

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