为了账号安全,请及时绑定邮箱和手机立即绑定

处理程序函数(例如,filepath.WalkFunc)中的接收者

处理程序函数(例如,filepath.WalkFunc)中的接收者

Go
阿晨1998 2021-05-06 17:05:36
我遇到了一个小问题,对此我只有一个难看的解决方案。我无法想象我是第一个,但是我还没有找到有关SO的任何线索。在以下(故意简化的)示例中,我想要在walk我的函数上有一个接收器filepath.WalkFunc。package mainimport (    "fmt"    "os"    "path/filepath")type myType boolfunc 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行为有关。
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信