处理函数中的接收者,例如filepath.WalkFunc

ffe*_*fel 5 go

我遇到了一个小问题,对此我只有一个难看的解决方案。我无法想象我是第一个,但是我还没有找到有关SO的任何线索。

在下面的示例中(我故意简化了),我想在walk我的函数上有一个接收器filepath.WalkFunc

package main

import (
    "fmt"
    "os"
    "path/filepath"
)

type myType bool

func main() {
    var t myType = true

    // would have loved to do something as:
    // _ = filepath.Walk(".", t.walk) 

    // that does not work, use a closure instead    
    handler := func(path string, info os.FileInfo, err error) error {return t.walk(path, info, err)}
    _ = filepath.Walk(".", handler)
}

func (t myType) walk(path string, info os.FileInfo, err error) error {

    // do some heavy stuff on t and paths
    fmt.Println(t, path)

    return err
}
Run Code Online (Sandbox Code Playgroud)

Func main()触发器walk()并且由于接收者t的存在walk(),我除了用这个丑陋的闭包handler作为filepath.Walk()。我本来希望有更多类似的东西, fileWalk(".", t.walk)但这是行不通的。它给出了编译错误“方法t.walk不是表达式,必须调用”

我的封闭解决方案是这方面的正确方法,还是我不知道有更好的选择。

PS。这是我不得不使用此闭包构造来传递具有接收器的处理函数的几种情况之一。因此,这个问题与传递处理函数有关,而不与filepath行为有关。

感谢您的建议。