猿问

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

我正在尝试将我的数据转换为 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 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)

    }

}


慕田峪4524236
浏览 105回答 1
1回答

侃侃无极

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

相关分类

Go
我要回答