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

我正在尝试将我的数据放入 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 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

    err = writer.Write(allData)

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


}


func checkError(message string, err error) {

    if err != nil {

        log.Fatal(message, err)

    }

}


慕田峪7331174
浏览 141回答 1
1回答

慕妹3242003

一般来说,您不能简单地从一种类型映射到另一种类型并让编译器弄清楚如何转换数据。其他语言可能会提供一些语法糖或有一些推断合理默认值的先例,但 Go 故意不提供这种魔力。您需要明确指示如何将数据结构的每个实例转换为要作为 CSV 行写出models.EndModel的切片。[]string像下面这样:// 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    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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go