亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Golang Walk 中提前終止?

如何在 Golang Walk 中提前終止?

Go
慕哥9229398 2022-01-04 20:50:54
如果可能,讓 Gofilepath.Walk提前返回的慣用方式是什么?我正在編寫一個函數來查找給定名稱的嵌套目錄。使用filepath.Walk我看不到在找到第一個匹配項后立即終止樹行走的方法。func (*RecursiveFinder) Find(needle string, haystack string) (result string, err error) {    filepath.Walk(haystack, func(path string, fi os.FileInfo, errIn error) (errOut error) {        fmt.Println(path)        if fi.Name() == needle {            fmt.Println("Found " + path)            result = path            return nil        }        return    })    return}
查看完整描述

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

}


查看完整回答
反對 回復 2022-01-04
?
倚天杖

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

}


查看完整回答
反對 回復 2022-01-04
  • 2 回答
  • 0 關注
  • 229 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號