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

标签 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)
}

最佳答案

将 Map 传递给返回 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)
}

关于go - 如何将 Map 传递给 Go 中的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34663992/

相关文章:

go - 如何使用模块替换云功能中的功能

linux - 为什么 os.Open 在打开目录时返回 nil 错误?

go - channel 以裸返回方式返回时为零

database - 使用 channel 进行并发数据库调用是好的设计吗?

json - Golang 中的深度复制 map

java - 如何解析多部分/表单数据?

go - 如何在 *tls.Conn 上设置 SetKeepAlivePeriod

go - 从嵌套映射类型获取值 map[string]interface{}

go - App Script Go Quickstart修改401错误

go - 如何迭代列表并使用 goterm 包绘制表格?