Golang Go语言中 吐槽一下 filepath.Glob 函数不支持两个星号(**)
ChatGPT 给的都是错误的结果
感觉这种功能比较基础啊,大佬们怎么没有实现呢,前端的构建工具基本上都支持这个语法!
别问为什么吐槽(小菜不会写)
Golang Go语言中 吐槽一下 filepath.Glob 函数不支持两个星号(**)
还有一个 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中实现类似的功能,有几种替代方案:
-
自定义递归函数:编写一个递归函数来遍历目录树,手动匹配所需的路径。这种方法虽然相对复杂,但提供了最大的灵活性。
-
使用第三方库:查找是否有第三方库提供了更强大的路径匹配功能,包括支持
**
。开源社区经常会有这类工具库。 -
操作系统命令:如果环境允许,可以通过调用操作系统命令(如
find
在Unix系统上)来实现更复杂的路径匹配,然后解析命令输出。这种方法依赖于外部命令,可能影响跨平台兼容性。
总之,虽然 filepath.Glob
在某些情况下显得功能有限,但通过上述方法,你仍然可以在Go中实现所需的路径匹配功能。选择哪种方法取决于你的具体需求、项目的复杂度以及对跨平台兼容性的要求。