项目地址: github.com/qtopie/sniphunt

在处理大规模代码库或海量文本数据时,搜索效率往往是开发者最头疼的问题。Sniphunt 是一个专为高性能而设计的 Go 语言搜索库,它不仅支持像 ripgrep 一样飞快的正则表达式搜索,还提供了基于相似度的代码片段匹配功能。

为什么选择 Sniphunt?

市面上已经有很多搜索工具,但 Sniphunt 的核心优势在于库化 (Library-first)极致的性能优化

1. 极致的性能设计

Sniphunt 采用了生产者-消费者模型,将文件遍历与内容匹配完全解耦:

2. 双模搜索

安装 Sniphunt

命令行工具安装

如果你需要一个现成的工具来替换你的基础搜索命令:

go install github.com/qtopie/sniphunt/cmd/sniphunt@latest

作为库引入项目

如果你想在你的 Go 应用中集成高性能搜索能力:

go get github.com/qtopie/sniphunt

经典用法示例

命令行用法

在所有 Go 文件中搜索 main 函数:

sniphunt -pattern "func.*main" -dir . -ext .go

寻找最接近的代码片段:

sniphunt -input target.java -dir ./src -ext .java

代码集成示例

package main

import (
    "context"
    "fmt"
    "github.com/qtopie/sniphunt/pkg/search"
)

func main() {
    s := search.NewSearcher()
    s.Extensions = []string{".go"}
    
    ctx := context.Background()
    // 启动流式搜索
    matchChan, errChan := s.Search(ctx, ".", "func.*main")
    
    for match := range matchChan {
        fmt.Printf("找到匹配: %s:%d\n", match.Path, match.LineNum)
    }
}

项目结构

Sniphunt 遵循清晰的工程布局,方便二次开发:

结语

Sniphunt 不仅仅是一个搜索工具,它更是一个高性能的底层组件。无论你是想构建自己的代码分析工具,还是需要处理海量日志数据,Sniphunt 都能为你提供坚实的基础。

👉 欢迎到 GitHub 提交 Issue 或 Star 支持:github.com/qtopie/sniphunt