3 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
這里有幾個(gè)問題:
writer.Write
采用 type 的參數(shù)[]string
,因此嘗試將字符串以外的任何內(nèi)容附加到(我假設(shè)是recordr
的簡(jiǎn)寫表示)將不起作用。您無法獲得結(jié)構(gòu)的長(zhǎng)度。
我對(duì)您的代碼做了一些修改:
為 csv 提供標(biāo)題以便于閱讀
更新
r
以接受等于 4 的容量len(headers)
- 我不確定您想要的容量是什么,但您可以輕松地將其更新為(可能是 3,而不是 4)。將 ID 字段轉(zhuǎn)換為字符串以便添加到
[]string
forwriter.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)
}

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
$

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()
- 3 回答
- 0 關(guān)注
- 262 瀏覽
添加回答
舉報(bào)