go - 附加到循环中的 slice

标签 go

我在循环中附加到 slice 时遇到问题。循环中最后读取的内容替换现有 slice 内容。

我试过内置函数append,也试过直接用索引赋值,都没用。

package main

import (
"fmt"
"io/ioutil"
"log"
)

func main() {

    content, err := ioutil.ReadDir("./")
    if err != nil {
        log.Fatal(err)
    }

    var a []map[string]string
    e := map[string]string{}
    for _, eachContent := range content {

        if eachContent.IsDir() {
            e["name"] = eachContent.Name()
            e["isdir"] = "1"
        } else {
            e["name"] = eachContent.Name()
            e["isdir"] = "0"
        }
        fmt.Println(e)
        a = append(a, e)
    }

    fmt.Println(a)

}

期望:

[map[name:dev isdir:1] map[isdir:1 name:etc] map[name:test.go isdir:0]] 

但是我得到了

[map[name:test.go isdir:0] map[isdir:0 name:test.go] map[name:test.go isdir:0]]

最佳答案

将 map 初始化移到循环中。这将每次创建新 map ,否则,您将覆盖同一 map 的内容:

for _, eachContent := range content {
   e := map[string]string{}
  // ...
}

关于go - 附加到循环中的 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57539314/

相关文章:

go - 使用 Go 抓取 HTML 下拉列表?

go - 我需要将 gopkg.lock 添加到 Git 吗?

go - 在 Golang 中,如何使用 channel 处理多个 goroutine

soap - 如何在 Golang 中解析 Soap Envelope?

go - 使用MultipartRequest上传文件

session - 将 Redis 用于小型 Gorilla session 是否有意义

go - 如何计算 golang 中移动窗口的最后 60 秒?

email - Go:连接到 SMTP 服务器并在一个连接中发送多封电子邮件?

go - 如何手动下载mysql驱动

go - 如何创建自定义格式化程序并出现 go 1.13 错误?