第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Golang 將包含結構作為值的映射導出到 csv

使用 Golang 將包含結構作為值的映射導出到 csv

Go
翻翻過去那場雪 2023-06-12 15:48:08
我有一個以結構為值的地圖,如下所示:type Record struct {    ID   int    Type string    Year string}m := make(map[int]Record)用一些記錄填充此地圖后,我將嘗試將它們導出為 csv:file, err := os.Create("export.csv")checkError("Error:", err)defer file.Close()writer := csv.NewWriter(file)defer writer.Flush()for key, value := range m {    r := make([]string, 0, 1+len(value))    r = append(r, key)    r = append(r, value)}writer.Flush()我收到了錯誤invalid argument value (type Record) for len。我應該如何處理這里的結構?我必須以某種方式將它轉換為字符串嗎?
查看完整描述

3 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

這里有幾個問題:

  1. writer.Write采用 type 的參數[]string,因此嘗試將字符串以外的任何內容附加到(我假設是recordr的簡寫表示)將不起作用。

  2. 您無法獲得結構的長度。

我對您的代碼做了一些修改:

  • 為 csv 提供標題以便于閱讀

  • 更新r以接受等于 4 的容量len(headers)- 我不確定您想要的容量是什么,但您可以輕松地將其更新為(可能是 3,而不是 4)。

  • 將 ID 字段轉換為字符串以便添加到[]stringforwriter.Write

在 Go Playground中進行測試。

例子:

type Record struct {

? ? ID? ?int

? ? Type string

? ? Year string

}


m := make(map[int]Record)


// populate this map with some records


file, err := os.Create("export.csv")

checkError("Error:", err)

defer file.Close()

writer := csv.NewWriter(file)

defer writer.Flush()


// define column headers

headers := []string{

? ? "id",

? ? "type",

? ? "year",

}


// write column headers

writer.Write(headers)


var idString string


for key := range m {


? ? r := make([]string, 0, 1+len(headers)) // capacity of 4, 1 + the number of properties your struct has & the number of column headers you are passing


? ? // convert the Record.ID to a string in order to pass into []string

? ? idString = strconv.Itoa(m[key].ID)


? ? r = append(

? ? ? ? r,

? ? ? ? idString,

? ? ? ? m[key].Type,

? ? ? ? m[key].Year,

? ? )


? ? writer.Write(r)

}


查看完整回答
反對 回復 2023-06-12
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

您的代碼有幾個問題。嘗試這樣的事情:


package main


import (

    "encoding/csv"

    "os"

    "strconv"

)


func main() {

    type Record struct {

        ID   int

        Type string

        Year string

    }


    m := make(map[int]Record)

    r := Record{ID: 1, Type: "A", Year: "2019"}

    m[r.ID] = r


    f, err := os.Create("export.csv")

    if err != nil {

        // handle error

    }

    defer f.Close()

    w := csv.NewWriter(f)

    defer w.Flush()


    for _, v := range m {

        r := make([]string, 0, 3)

        r = append(r, strconv.Itoa(v.ID))

        r = append(r, v.Type)

        r = append(r, v.Year)

        err := w.Write(r)

        if err != nil {

            // handle error

        }

    }

}

輸出:


$ go run export.go

$ cat export.csv

1,A,2019


查看完整回答
反對 回復 2023-06-12
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

len()您正在嘗試在結構而不是地圖上應用嘗試以下操作:


file, err := os.Create("export.csv")

checkError("Error:", err)

defer file.Close()

writer := csv.NewWriter(file)

defer writer.Flush()


r := make([]string, 0, 1+len(m))

for key, value := range m {

    r = append(r, key)

    r = append(r, value)

}

writer.Flush()


查看完整回答
反對 回復 2023-06-12
  • 3 回答
  • 0 關注
  • 281 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號