给定正则表达式和路径,在Golang中通过正则表达式查找文件

时间:2020-03-08 05:22:03

标签: go file-io browser-cache

我正在尝试通过以下方式实现缓存清除:

  • 在前端,我通过JS插件将内容哈希插入到资产文件名(例如bundle.1947shkey7.js
  • 在HTML文件中,使用一些模板标记为我创建资产(例如<script>)标记
  • 从Golang端获取模板函数,该函数将提取目录路径dirpath,从文件名filenameRegex创建一个正则表达式,然后使用dirpathfilenameRegex查找文件并为其形成标签。

其中大多数已经在起作用,除了我不知道如何最好地进行基于正则表达式的查找。

该文件的正则表达式类似于[name].\\w+.[ext],以供参考。这行得通,我已经测试过了。

但是,如何使用该正则表达式和dirpath获取实际文件的路径?我知道我们可以做类似

的操作
filepath.Walk(dirpath, func(path string, info os.FileInfo, err error) error {
 // logic to check info.IsDir(), info.Name(), and written actual filename
})

但是有一个问题:复杂性。如果我正确理解,将对目录dirname 中的每个文件执行

这是通过正则表达式查找资产文件名的唯一方法,还是有一种更简单的方法?

1 个答案:

答案 0 :(得分:0)

你可以使用这样的东西,你可以自定义回调到你的 需求:

package main

import (
   "io/fs"
   "path/filepath"
)

func glob(root string, fn func(string)bool) []string {
   var files []string
   filepath.WalkDir(root, func(s string, d fs.DirEntry, e error) error {
      if fn(s) {
         files = append(files, s)
      }
      return nil
   })
   return files
}

func main() {
   files := glob(".", func(s string) bool {
      return filepath.Ext(s) == ".js"
   })
   for _, file := range files {
      println(file)
   }
}