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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用 Golang 將包含結(jié)構(gòu)作為值的映射導(dǎo)出到 csv

使用 Golang 將包含結(jié)構(gòu)作為值的映射導(dǎo)出到 csv

Go
翻翻過去那場(chǎng)雪 2023-06-12 15:48:08
我有一個(gè)以結(jié)構(gòu)為值的地圖,如下所示:type Record struct {    ID   int    Type string    Year string}m := make(map[int]Record)用一些記錄填充此地圖后,我將嘗試將它們導(dǎo)出為 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()我收到了錯(cuò)誤invalid argument value (type Record) for len。我應(yīng)該如何處理這里的結(jié)構(gòu)?我必須以某種方式將它轉(zhuǎn)換為字符串嗎?
查看完整描述

3 回答

?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊

這里有幾個(gè)問題:

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

  2. 您無法獲得結(jié)構(gòu)的長(zhǎng)度。

我對(duì)您的代碼做了一些修改:

  • 為 csv 提供標(biāo)題以便于閱讀

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

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

在 Go Playground中進(jìn)行測(cè)試。

例子:

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)

}


查看完整回答
反對(duì) 回復(fù) 2023-06-12
?
MMMHUHU

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊

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


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


查看完整回答
反對(duì) 回復(fù) 2023-06-12
?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊

len()您正在嘗試在結(jié)構(gòu)而不是地圖上應(yīng)用嘗試以下操作:


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()


查看完整回答
反對(duì) 回復(fù) 2023-06-12
  • 3 回答
  • 0 關(guān)注
  • 262 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)