本文主要是介绍基于Go语言开发一个 IP 归属地查询接口工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下...
在日常开发中,IP 地址归属地查询是一个常见需求:比如记录用户访问日志时展示用户的地理位置,或在安全防护系统中分析异常登录来源。本文将带你用 Go 语言快速开发一个 IP 归属地查询接口服务。
功能目标
提供一个 HTTP 接口,输入 IP 地址返回归属地信息
支持查询单个 IP,也可扩展成批量查询
数据源可选择:
结果返回 jsON 格式
技术栈
Go 标准库:net/http
、encoding/json
第三方库:
github.com/lionsoul2014/ip2region/binding/golang/xdb
—— 离线 IP 数据库解析
存储方式:使用本地 ip2region.xdb
文件
项目结构
ip-lookup/
├── main.go
├── ip2region.xdb # 离线数据库文件
├── go.mod
核心代码(main.go)
package main import ( "encoding/json" "log" "net" "net/http" "github.com/lionsoul2014/ip2region/binding/golang/xdb" ) // 响应结构 type IPInfo phpstruct { IP string `json:"ip"` Region string `json:"region"` Error string `json:"error,omitempty"` } var searcher *xdb.Searcher func main() { // 加载 ip2region 数据库 var err error searcher, err = xdb.NewWithFileOnly("ip2region.xdb") if err != nil { log.Fatalf("❌ 加载 ip2region.xdb 失败: %v", err) } http.HandleFunc("/ip", queryIP) log.Println("✅ IP 归属地查询服务已启动: http://localhost:8080/ip?addr=1.1.1.1") http.ListenAndServe(":8080", nil) } func queryIP(w http.ResponseWriter, r *http.Request) { addr := r.URL.Query().Get("addr") if addr == "" { writeJSON(w, IPInfo{Error: "缺少参数 addr"}) return } if net.ParseIP(addr) == nil { writeJSON(w, IPInfo{IP: addr, Error: "无效的 IP 地址"}) return } region, err := searcher.SearchByStr(addr) if err != nil { writeJSON(w, IPInfo{IP: addr, Error: err.Error()}) return } writeJSON(w, IPInfo{IP: addr, Region: region}) } func writeJSON(w http.ResponseWriter, data IPInfo) { w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(data) }
使用方法
1.初始化项目并安装依赖
go mod init ip-lookup
go get github.com/lionsoul2014/ip2region/binding/gohttp://www.chinasem.cnlang/xdb
2.下载 ip2region.xdb 数据库文件,放到项目根目录
3.运行
go run main.go
4.请求示例
curl "http://localhost:8080/ip?addr=8.8.8.8"
返回结果示例:
{ "ip": "8.8.8.8", "region": "美国|0|加利福尼亚|圣克拉拉|谷歌" }
扩展功能
- 批量查询:支持上传 IP 列表文件,返回批量结果
- 缓存机制:对高频 IP 查询做缓存,提China编程升性能
- 前端展示:结合简单前端页面展示查询结果
- 多数据源支持:同时支持 ip2region 和第三方 API,作为备份
总结
通过本案例,我们实现了一个 IP 归属地查询接口,使用 ip2region
离线库做到快速查询,性能高效且无需依赖外部服务。这个小工具既能单独运行,也能嵌入到日志分析、Web 服务或安全监控系统中使用,是 Go 项目开发中的一个实用模块。
到此这篇关于基于Go语言开发一个 IP 归属地查询接口工具的文章就介绍到这了,更多相关Go查询IP归属地内容请搜索编程China编程(wwwwww.chinasem.cn.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!
这篇关于基于Go语言开发一个 IP 归属地查询接口工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!