将地图写入csv

Dan*_*gle 4 csv go

我一直试图弄清楚如何正确地将地图写入csv文件而没有运气.

我本质上有一个查询sql数据库的程序,我将其中一个返回值存储为地图的关键字,然后存储一个字符串,用于返回与之相关的数据,例如地图将是:

var m = make(map[string][]string)

m['test1'] = [5, 4, 3]
Run Code Online (Sandbox Code Playgroud)

所以把它写到csv就可以了

test1,5,4,3

它打印到csv就像列表/切片一样,我将它存储在地图中,以便更容易在其他地方构建动态查询.

我试过使用for循环,这样:

for key, value := range m{
    writer.Write(key)
    writer.Write(value)
}
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

不能在job.Write的参数中使用key(type string)作为type []字符串

我已经做了很多谷歌搜索和搜索,似乎无法找到一种方法来正确地做到这一点.

pet*_*rSO 6

包csv

func(*Writer)写

func (w *Writer) Write(record []string) error
Run Code Online (Sandbox Code Playgroud)

Writer将单个CSV记录写入w以及任何必要的引用.记录是一串字符串,每个字符串是一个字段.


错误:不能使用key(type string)作为[]string参数中的 类型writer.Write


"我在这里做了很多谷歌搜索和搜索."

要解决此问题,请阅读文档Write并按照错误消息中的说明进行操作,您有类型string,Write想要类型[]string.例如,

for key, value := range m {
    r := make([]string, 0, 1+len(value))
    r = append(r, key)
    r = append(r, value...)
    err := writer.Write(r)
    if err != nil {
        // handle error
    }
}
writer.Flush()
Run Code Online (Sandbox Code Playgroud)

  • @Dangle:一个切片是一个`struct`,它有一个长度,一个容量和一个指向底层数组的指针,在64位架构上有24(3*(64/8))个字节.`make([] string,0,1 + len(value))`为slice的底层数组`string`s分配了确切的大小,这避免了`append`期间的重新分配.`string`是一个`struct`,它有一个长度和一个指向底层字符串字节的指针. (2认同)