为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕姐4208626 2021-12-06 19:44:31
我正在尝试编写一个 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)}
查看完整描述

2 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

将 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)

}


查看完整回答
反对 回复 2021-12-06
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

你可以写


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

...//Do something with map 

}

var mymap Map


err := filepath.Walk(path, mymap.visit) //mymap.visit express 'func(path string, f os.FileInfo, err error) error' same as visit just with mymap evaluated

这叫做方法值


查看完整回答
反对 回复 2021-12-06
  • 2 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信