我在循环中附加到 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/