我需要遞回地找到一個目錄中的所有檔案,該目錄也可以有很多子目錄。我想知道有沒有什么辦法只能給我*.json檔案?我有下面的方法來完成這項作業,并在所有目錄中遞回地給我所有檔案,但我不確定我在HasSuffix這里使用是否正確。我是 golang 的新手,所以我不確定是否有更好或有效的方法來做到這一點。
func WalkDir(root string) ([]string, error) {
var files []string
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if !info.IsDir() && strings.HasSuffix(path, "json") {
files = append(files, path)
}
return nil
})
return files, err
}
另外我該如何修改上面的方法,以便它可以給我所有匹配*.json或*.txt后綴的檔案。基本上它應該能夠使用后綴陣列并給我匹配的所有檔案。這樣做的有效方法是什么?
uj5u.com熱心網友回復:
您可能還想確保在檔案后綴之前也存在點 (.)。
同樣正如@maxm 所指出的,WalkDir根據檔案是首選:
Walk 的效率低于 Go 1.16 中引入的 WalkDir,后者避免在每個訪問過的檔案或目錄上呼叫 os.Lstat。
要檢查多個后綴的匹配,您可以嘗試:
func WalkDir(root string, exts []string) ([]string, error) {
var files []string
err := filepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error {
if d.IsDir() {
return nil
}
for _, s := range exts {
if strings.HasSuffix(path, "." s) {
files = append(files, path)
return nil
}
}
return nil
})
return files, err
}
并使用:
files, err := WalkDir("/home", []string{"json", "txt"})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400773.html
標籤:去
上一篇:將restapiPOST請求從json轉換為golanggofiber框架中的表單資料
下一篇:記錄命令的退出代碼
