我遇到了一个小问题,对此我只有一些丑陋的解决方案。我无法想象我是第一个,但我还没有找到任何关于 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
}
Funcmain()
触发器walk()
,并且由于接收器t
to walk()
,我找不到其他方法,只能使用这个丑陋的闭包handler
作为filepath.Walk()
. 我本来希望有更多类似的东西,
fileWalk(".", t.walk)
但这不起作用。它给出了编译错误“方法 t.walk 不是表达式,必须调用”
在这方面,我的关闭解决方案是正确的方法,还是我不知道有更好的选择。
PS。这是我必须使用此闭包构造来传递具有接收器的处理程序函数的几种情况之一。因此,这个问题更多地与传递处理函数有关,而不是与filepath
行为有关。
谢谢你的建议。