530e2ebd9d42d5fa0cf6ce8fbfae1c074bb68e31
sese-engine Go 重构版
Python 原版的 Go 语言重构,使用标准英文命名,单二进制部署。
目录结构
golang/
├── main.go # 主入口,goroutine 启动所有模块
├── go.mod
├── config/
│ └── config.go # 全局配置参数(对应 配置.py)
├── storage/
│ └── storage.go # bbolt 持久化层(对应 存储.py,替换 rimo_storage)
├── crawler/
│ ├── crawler.go # BFS 爬虫调度(对应 上网.py)
│ └── fetcher.go # HTTP 获取 + robots.txt + 限流(对应 虫.py)
├── parser/
│ └── parser.go # HTML 解析(对应 文.py)
├── analyzer/
│ └── analyzer.go # 分词 + 关键词权重(对应 分析.py + utils.py 分词部分)
│ 使用 gojieba(中文)+ gofasttext(语言检测)
├── harvester/
│ └── harvester.go # 索引写入服务,监听 :5000(对应 收获服务器.py)
├── search/
│ └── server.go # 搜索 API,监听 :80(对应 人服务器.py)
├── backlink/
│ └── backlink.go # 反向链接计算,每 48h 运行(对应 回.py)
└── info/
└── info.go # 繁荣表 / 调整表 / 屏蔽词加载(对应 信息.py)
依赖项
| Go 包 | 替代 Python 包 | 用途 |
|---|---|---|
github.com/yanyiwu/gojieba |
jieba |
中文分词 |
github.com/nicholasgasior/gofasttext |
fasttext |
语言检测 |
go.etcd.io/bbolt |
rimo_storage |
KV 存储 / 倒排索引 |
github.com/andybalholm/brotli |
brotli |
压缩 |
golang.org/x/net/html |
lxml |
HTML 解析 |
golang.org/x/net/html/charset |
chardet | 编码检测 |
构建与运行
cd golang
# 下载依赖(需要 CGo 编译器,用于 gojieba / gofasttext)
go mod tidy
# 构建
go build -o sese-engine .
# 运行(在 sese-engine 项目根目录下)
cd ..
./golang/sese-engine \
--storage ./savedata \
--entry https://zh.wikipedia.org/ \
--fasttext ./lid.176.ftz \
--stopwords ./data/标点符号.json
一个进程启动所有模块:
:5000— 收获服务器(爬虫推送关键词):80— 搜索 API(GET /search?q=关键词)- 后台 goroutine — BFS 爬虫
- 后台 goroutine — 每 48 小时反向链接计算
与 Python 版的主要差异
| 方面 | Python 版 | Go 版 |
|---|---|---|
| 并发 | GIL + 线程池(假并发) | goroutine 真并发 |
| 存储 | rimo_storage(自研) | bbolt(嵌入式 KV) |
| 部署 | 需要 Python 环境 | 单二进制,无运行时依赖 |
| 命名 | 全中文 | 标准英文 |
| 进程数 | 3~4 个进程 | 1 个进程多 goroutine |
| 编码检测 | requests 自动检测 | golang.org/x/net/html/charset |
| Prometheus | 可选 | 暂未集成(可后续添加) |
注意事项
- CGo 依赖:gojieba 和 gofasttext 均需要 C/C++ 编译器(gcc/clang)。 Windows 下建议使用 MinGW 或 WSL。
- fasttext 模型:
lid.176.ftz需要与 Python 版共用,路径通过--fasttext指定。 - 数据迁移:存储格式(bbolt JSON)与 Python 版(rimo_storage 二进制)不兼容, 需要全新爬取,或编写迁移脚本。
- stop words 文件:复用 Python 版的
data/标点符号.json。
Languages
Go
98.4%
Shell
1.6%