2 回答
TA贡献1828条经验 获得超4个赞
你应该从你的 walkfunc 返回一个错误。为确保没有返回真正的错误,您可以只使用已知错误,例如io.EOF.
func Find(needle string, haystack string) (result string, err error) {
err = filepath.Walk(haystack,
filepath.WalkFunc(func(path string, fi os.FileInfo, errIn error) error {
fmt.Println(path)
if fi.Name() == needle {
fmt.Println("Found " + path)
result = path
return io.EOF
}
return nil
}))
if err == io.EOF {
err = nil
}
return
}
TA贡献1828条经验 获得超3个赞
您可以使用errors.New来定义您自己的错误:
import (
"errors"
"os"
"path/filepath"
)
var stopWalk = errors.New("stop walking")
func find(name, root string) (string, error) {
var spath string
e := filepath.Walk(root, func (path string, info os.FileInfo, e error) error {
if info.Name() == name {
spath = path
return stopWalk
}
return e
})
if e == stopWalk {
return spath, nil
}
return "", e
}
或者你可以使用filepath.Glob:
import "path/filepath"
func find(pattern string) (string, error) {
paths, e := filepath.Glob(pattern)
if paths == nil { return "", e }
return paths[0], nil
}
- 2 回答
- 0 关注
- 179 浏览
添加回答
举报