追加切片循环

I have a problem with appending to a slice in a loop. The last read content in loop replaces existing slice content.

I have tried the built-in function append and also tried directly assigning with indexes, none works.

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)

}

Exepecting:

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

but I got

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

Move map initialization into the loop. This will create new map each time, otherwise, you are overriding the content of the same map:

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