问题
我现在正在对多个文件运行一个正则表达式grep,以获取所有TODO,但是命令完成需要花几分钟的时间:
real 5m8.073s
user 0m35.593s
sys 4m17.608s
目标
目标是立即获得TODO的数量。
尝试
根据我在互联网上发现的信息,我认为Golang将是一个不错的选择,我创建了以下代码。
func check_for_todo(path string) {
text := "//\\sTODO\\s\\d"
b, err := ioutil.ReadFile(path)
if err != nil {
panic(err)
}
s := string(b)
// containsTodo := strings.Contains(s, text)
containsTodo, _ := regexp.MatchString(text, s)
if containsTodo {
numberOfTodos++
fmt.Println("This file contains a todo:", path)
}
}
结果
现在查询的速度是bash的两倍。
real 2m17.050s
user 0m0.015s
sys 0m0.015s
讨论
我觉得该代码可以进行优化,目前是不可靠的。我现在正在研究通道和goroutine。
答案 0 :(得分:1)
您可能想查看the silver searcher(也称为ag
)所做的优化。为了进行极其快速的代码搜索,它进行了许多优化。
另一种选择可能是预先构建索引,因此搜索比实时执行的任何搜索都快。在ag
自述文件中,引用了exuberant ctags,它可以用于非常大的代码库。