Golang Go语言中 吐槽一下 filepath.Glob 函数不支持两个星号(**)

发布于 1周前 作者 nodeper 来自 Go语言

ChatGPT 给的都是错误的结果

感觉这种功能比较基础啊,大佬们怎么没有实现呢,前端的构建工具基本上都支持这个语法!

别问为什么吐槽(小菜不会写)


Golang Go语言中 吐槽一下 filepath.Glob 函数不支持两个星号(**)
8 回复

还有一个 template.ParseFiles ,不同子目录下文件同名也不行!额,搞不懂

更多关于Golang Go语言中 吐槽一下 filepath.Glob 函数不支持两个星号(**)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


go 跟前端的关系是?

应该是 Go 文件通配设计就是如此,可以参考: https://pkg.go.dev/path/filepath#Match

不过在 Java 中确实会有 ** 这种通配写法

哈哈,没关系,我是前端,发现 go 不能 使用 ** 很难受

嗯,只是好奇 大佬们为何这样设计!我觉得这个平时应该经常用到。

至于为什么这样设计,看看这个 issue 有没有你想要的答案 https://github.com/golang/go/issues/11862

在Go语言中,filepath.Glob 函数用于模式匹配文件路径,但它确实不支持像某些shell(如bash)中那样的双星号(**)通配符,用于匹配任意深度的目录层级。这是一个已知的限制,主要因为 filepath.Glob 的设计是基于POSIX的glob模式匹配,而POSIX标准中并未定义**的语义。

如果你需要在Go中实现类似的功能,有几种替代方案:

  1. 自定义递归函数:编写一个递归函数来遍历目录树,手动匹配所需的路径。这种方法虽然相对复杂,但提供了最大的灵活性。

  2. 使用第三方库:查找是否有第三方库提供了更强大的路径匹配功能,包括支持**。开源社区经常会有这类工具库。

  3. 操作系统命令:如果环境允许,可以通过调用操作系统命令(如find在Unix系统上)来实现更复杂的路径匹配,然后解析命令输出。这种方法依赖于外部命令,可能影响跨平台兼容性。

总之,虽然 filepath.Glob 在某些情况下显得功能有限,但通过上述方法,你仍然可以在Go中实现所需的路径匹配功能。选择哪种方法取决于你的具体需求、项目的复杂度以及对跨平台兼容性的要求。

回到顶部