登录
首页 >  Golang >  Go问答

使用 Golang Glob 方法列出目录的可能性是什么?

来源:stackoverflow

时间:2024-02-27 08:30:29 227浏览 收藏

今天golang学习网给大家带来了《使用 Golang Glob 方法列出目录的可能性是什么?》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

golang glob 的行为不符合我的预期。假设我有一个目录“foo”,其结构如下:

foo
|-- 1.txt
|-- 2.csv
|-- 3.json
|-- bar
`-- baz

我想做一个仅获取 foo 中的目录“bar”和“baz”的 glob。所以我尝试这样做:

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 仅遍历某个路径下的目录,或者我是否需要使用其他方法来完成此任务?


正确答案


您可以遍历匹配列表并对每个匹配调用 os.stat。 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)
    }
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>