如何在Golang回调函数中传递变量?

时间:2016-10-14 12:00:47

标签: go

我有以下代码:

func loopThroughDirs(path string, fileInfo os.FileInfo, err error) error {
    ...do something with service...
    return nil
}

func main() {
    service, err := storage.New(client)
    ...
    filepath.Walk(*dirName, loopThroughDirs)
}

我想解决的问题是,我想在 service内使用loopThroughDirs() 。我该怎么做?

PS: loopThroughDirs内的filepath.Walk()函数是否在Go中被称为回调?

2 个答案:

答案 0 :(得分:4)

您还可以尝试返回WalkFunc功能:

func main() {
    service, err := storage.New(client)
    ...
    filepath.Walk(*dirName, getWalkFunc(service))
}

func getWalkFunc(service storage.Service) filepath.WalkFunc {
    return func(path string, fileInfo os.FileInfo, err error) error {
        // ...do something with service...
        return nil
    }
}

答案 1 :(得分:3)

一种方法是在loopThroughDirs内匿名声明main

func main() {
    service, err := storage.New(client)
    ...
    filepath.Walk(*dirName, func(path string, fileInfo os.FileInfo, err error) error {
        ...do something with service...
        return nil
    })
}