我遇到了一个小问题,对此我只有一个难看的解决方案。我无法想象我是第一个,但是我还没有找到有关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
}
Func键main()触发walk(),并因为接收的t到walk(),我不能找到另一种方式,而不是用这个丑陋的闭合handler作为参数filepath.Walk()。我本来希望有更多类似的东西, fileWalk(".", t.walk)但这是行不通的。它给出了编译错误“方法t.walk不是表达式,必须调用”
我的封闭解决方案是这方面的正确方法,还是我不知道有更好的选择。
PS。这是我不得不使用这种闭包构造来传递具有接收器的处理函数的几种情况之一。因此,这个问题与传递处理函数有关,而不与filepath行为有关。
相关分类