gpt4 book ai didi

go - 什么是 `regex grep` ,应用于文件,Golang 中的等价物?

转载 作者:数据小太阳 更新时间:2023-10-29 03:40:48 25 4
gpt4 key购买 nike

问题

我现在正在对多个文件运行正则表达式 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

讨论

我觉得这段代码可以优化并且目前是曲折的。我现在正在研究 channel 和协程。

最佳答案

您可能想查看 the silver searcher 所做的优化(又名 ag)。它进行了大量优化以实现极快的代码搜索。

另一种选择可能是预先构建索引,这样搜索速度甚至比实时执行的任何操作都要快。在 ag 自述文件中,exuberant ctags被引用,它执行此操作并且可以用于非常大的代码库。

关于go - 什么是 `regex grep` ,应用于文件,Golang 中的等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52246487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com