Golang Glob的行為方式沒有達到我的預期。假設我有一個具有以下結構的目錄“foo”:foo|-- 1.txt|-- 2.csv|-- 3.json|-- bar`-- baz我想做一個glob,只獲取foo中的目錄“bar”和“baz”。所以我試試這個:path = "foo/*/"matches, err := filepath.Glob(path)if err != nil { log.Fatal(err)}fmt.Println(matches)這不會生成匹配項:[]如果我刪除最后一個尾部斜杠并將路徑更改為 ,我會同時獲得文件和目錄,這不是我想要的結果:"foo/*"[foo/1.txt foo/2.csv foo/3.json foo/bar foo/baz]我預計如果存在尾部斜杠,Glob 將僅返回與 glob 模式匹配的目錄。我看到GitHub上注意到了同樣的問題,但看不到任何解決方法 - 這聽起來像是一個錯誤,一個文檔拙劣的功能,或者只是缺乏預期的功能。我已經檢查了Go文檔中的Match函數,Glob使用,它沒有提到任何關于尾部斜杠的內容。所以基本上:有沒有一個解決方法,以便我可以使用Glob只用Glob在某個路徑下的目錄,或者我是否需要使用另一種方法來完成這個任務?
1 回答

米脂
TA貢獻1836條經驗 獲得超3個贊
您可以循環訪問匹配項列表并調用 os。統計他們每個人。操作系統。Stat 返回描述文件的 FileInfo 結構,它包含一個名為 IsDir 的方法,用于檢查文件是否為目錄。示例代碼:
// Note: Ignoring errors.
matches, _ := filepath.Glob("foo/*")
var dirs []string
for _, match := range matches {
f, _ := os.Stat(match)
if f.IsDir() {
dirs = append(dirs, match)
}
}
- 1 回答
- 0 關注
- 99 瀏覽
添加回答
舉報
0/150
提交
取消