猿问

如何将 Map 传递给 Go 中的回调函数

我正在尝试编写一个 Go 程序来遍历目录并找到某个文件并将该信息存储在 Map 中。这是我到目前为止所拥有的。我不确定如何将 Map 传递给访问函数,因为它是一个回调函数。


..

type MyFile struct {

    Name       string

    FilePath    string

    FileMD5Hash [16]byte

}


func visit(path string, f os.FileInfo, err error) error {


    fileName := f.Name()

    if !f.IsDir() && strings.Contains(strings.ToLower(fileName), "myfile") {

        df := parseFile(path)

        fmt.Printf("Visited: %s [%x], %s, %s\n", df.FilePath)

    }


    return nil

}


func parseFile(path string)...


func check(e error) ...


func WalkDir(path string) {

    err := filepath.Walk(path, visit)

    fmt.Printf("filepath.Walk() returned %v\n", err)

}


慕姐4208626
浏览 195回答 2
2回答

aluckdog

将 Map 传递给返回 a 的函数,filepath.WalkFunc然后将其传递给filepath.Walk. 它是一个类似构造函数的东西。func visit(map Map) filepath.WalkFunc {    return func(path string, f os.FileInfo, err error) error {        // do something with map        fileName := f.Name()        if !f.IsDir() && strings.Contains(strings.ToLower(fileName), "myfile") {            df := parseFile(path)            fmt.Printf("Visited: %s [%x], %s, %s\n", df.FilePath)        }        return nil    }}func WalkDir(path string) {    err := filepath.Walk(path, visit(map))    fmt.Printf("filepath.Walk() returned %v\n", err)}

摇曳的蔷薇

你可以写func (map Map) visit(path string, f os.FileInfo, err error) error {...//Do something with map }var mymap Maperr := filepath.Walk(path, mymap.visit) //mymap.visit express 'func(path string, f os.FileInfo, err error) error' same as visit just with mymap evaluated这叫做方法值
随时随地看视频慕课网APP

相关分类

Go
我要回答