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 關注
- 229 瀏覽
添加回答
舉報