Dictionary Go-使用闭包并向切片添加映射-filesystem.walk
在下面的代码中,我试图将文件信息添加到地图中,地图将被添加到切片中。该切片包含文件系统中每个文件的映射。我的理解是,这类似于用Python构建字典数组的方式Dictionary Go-使用闭包并向切片添加映射-filesystem.walk,dictionary,go,closures,Dictionary,Go,Closures,在下面的代码中,我试图将文件信息添加到地图中,地图将被添加到切片中。该切片包含文件系统中每个文件的映射。我的理解是,这类似于用Python构建字典数组的方式 package files import ( "path/filepath" "os" "fmt" ) func GetFiles() { var numScanned int var fileSlice = []map{} numScanned = 0 var scan =
package files
import (
"path/filepath"
"os"
"fmt"
)
func GetFiles() {
var numScanned int
var fileSlice = []map{}
numScanned = 0
var scan = func(path string, f os.FileInfo, err error) error {
numScanned ++
var fileDetails map[string]interface{}
fmt.Printf("%s with %d bytes\n", path,f.Size())
fileDetails["filename"] = f.Name()
fileDetails["filesize"] = f.Size()
fileSlice = append(fileSlice, fileDetails) //Error = cannot use fileDetails (type map[string]interface {}) as type string in append
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("%s with %d bytes\n", path,f.Size())
}
return nil
}
directories := [] string {"C:\\"}
numOfDirectories := len(directories)
for i := 0; i < numOfDirectories; i++ {
err := filepath.Walk(directories[i], scan)
if err != nil {
fmt.Printf(err.Error())
}
}
fmt.Printf("%d", numScanned)
}
我还试图弄清楚闭包在Go中是如何工作的,这样我就可以将文件细节添加到映射中,映射被添加到切片中,我可以在filesystem.Walk完成后访问该切片
谢谢
编辑:
我更新了代码,但如何制作一张地图?错误显示其全部-
字符串
!=<代码>映射[字符串]接口{}。另外,您正在隐藏文件详细信息
。您不能将映射放入[]字符串
,您没有初始化映射,您正在扫描
函数中重新声明映射,隐藏外部作用域。感谢您的帮助。我更新了导致新错误的代码。你如何制作一张地图的切片?今天下午我看了一会儿。你为什么用地图?
c:\project\src>go run main.go
# files
C:\project\src\files\files.go:12: syntax error: unexpected ]
C:\project\src\files\files.go:14: non-declaration statement outside function body
C:\project\src\files\files.go:36: non-declaration statement outside function body
C:\project\src\files\files.go:37: non-declaration statement outside function body
C:\project\src\files\files.go:44: non-declaration statement outside function body
C:\project\src\files\files.go:46: non-declaration statement outside function body
C:\project\src\files\files.go:48: syntax error: unexpected }