GoCzdb
GO解析CZDB免费IP数据库
Install / Use
/learn @zhengjianyang/GoCzdbREADME
goCzdb 使用指南
goCzdb 是一个用于在纯真(CZ88)IP库中搜索数据的类。它支持三种类型的搜索算法:内存搜索(MEMORY)和B树搜索(BTREE)。数据库类型(IPv4或IPv6)和查询类型(MEMORY、BTREE)在运行时确定。
goMod 依赖
如果你想在你的项目中使用goCzdb : go get github.com/zhengjianyang/goCzdb
支持 IPv4 和 IPv6
goCzdb 支持 IPv4 和 IPv6 地址的查询。在创建 DbSearcher 实例时,你需要提供相应的数据库文件和密钥。
数据库文件和密钥可以从 www.cz88.net 获取。
如何使用
首先,你需要创建一个 DbSearcher 的实例。在创建实例时,你需要提供数据库文件的路径、查询类型和用于解密数据库的密钥。
searcher, err := NewDbSearcher(databasePath, queryType, key)
defer searcher.Close()
然后,你可以使用 searcher 方法来根据提供的 IP 地址在数据库中搜索数据。
searcher.Search("8.8.8.8")
如果搜索成功,searcher 方法将返回找到的数据块的区域。如果搜索失败,它将返回 null。
返回的字符串格式为 "国家–省份–城市–区域 ISP"。例如,对于一个位于中国上海市虹口区的IP地址,返回的字符串可能是 "中国–上海–上海–虹口区 电信"。如果搜索失败,它将返回 null。
查询类型
DbSearcher 支持2种查询类型:MEMORY 和 BTREE。
- MEMORY:此模式是线程安全的,将数据存储在内存中。
- BTREE:此模式使用 B-tree 数据结构进行查询。它不是线程安全的。不同的线程可以使用不同的查询对象。
你可以在创建 DbSearcher 实例时选择查询类型。
searcher, err := NewDbSearcher(databasePath, "MEMORY", key)
线程安全
请注意,只有 MEMORY 查询模式是线程安全的。如果你在高并发环境下使用 BTREE 查询模式,可能会导致打开的文件过多的错误。在这种情况下,你可以增加内核中允许打开的最大文件数(fs.file-max),或者使用 MEMORY 查询模式。当然更合理的一个方式是为线程池中的每一个线程只创建一个DbSearcher实例。
关闭数据库
当查询结束时,你应该关闭数据库。注意并不是说每次查询都需要创建DbSearcher实例查完后关闭,如果是为每个线程创建一个DbSearcher实例,那么只有在线程结束时才需要关闭数据库。
searcher.Close()
这将释放所有使用的资源,并关闭对数据库文件的访问。
Related Skills
node-connect
341.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.4kCommit, push, and open a PR
