NetPulse 是一个专为个人开发者打造的轻量级Go库,专门解决地理位置查询的痛点!
个人账号接入高德地图期间,多次被温馨提醒。
咱们作为个人开发者,没有企业资质,接口调用越来越不方便。
🌟 核心优势
🚀 智能故障转移
// 查询当前公网 IP 地址 (多服务商,快速响应)
externalIP, err := ip.ExternalIP()
// 查询当前内网 IP 地址
iip := ip.InternalIP()
🌍 多语言支持
// 中文模式 - 精准中文地区信息
engine := geoip.New(geoip.Chinese)
// 英文模式 - 全球服务
engine := geoip.New(geoip.English)
⚡ 高性能缓存
// 默认1小时缓存,避免重复调用
info, err := engine.Lookup(ctx, "8.8.8.8") // 自动缓存结果
🛡️ 完全免费
- 基于免费API服务
- 无需注册,无需付费
- 个人开发者友好
📖 快速上手
1️⃣ 安装
go get github.com/ixugo/netpulse
2️⃣ 获取本机IP
package main
import (
"fmt"
"log"
"github.com/ixugo/netpulse/ip"
)
func main() {
// 获取外网IP
externalIP, err := ip.ExternalIP()
if err != nil {
log.Printf("获取外网IP失败: %v", err)
return
}
fmt.Printf("我的外网IP: %s\n", externalIP)
// 获取内网IP
internalIP := ip.InternalIP()
fmt.Printf("我的内网IP: %s\n", internalIP)
}
3️⃣ 查询地理位置
package main
import (
"context"
"fmt"
"log"
"github.com/ixugo/netpulse/geoip"
)
func main() {
// 创建地理位置查询引擎
engine := geoip.New(geoip.Chinese)
// 查询IP地理信息
ctx := context.Background()
info, err := engine.Lookup(ctx, "8.8.8.8")
if err != nil {
log.Printf("查询失败: %v", err)
return
}
fmt.Printf("IP: %s\n", info.IP)
fmt.Printf("国家: %s\n", info.Country)
fmt.Printf("省份: %s\n", info.Region)
fmt.Printf("城市: %s\n", info.City)
fmt.Printf("运营商: %s\n", info.ISP)
}
4️⃣ 高级用法:自定义服务商
package main
import (
"context"
"fmt"
"github.com/ixugo/netpulse/geoip"
)
func main() {
// 只使用指定的服务商
engine := geoip.New(
geoip.English,
geoip.WithHandlers(
geoip.NewFreeIPAPI(), // freeipapi.com
geoip.NewIPapi(), // ipapi.com
),
)
ctx := context.Background()
info, err := engine.Lookup(ctx, "114.114.114.114")
if err != nil {
fmt.Printf("查询失败: %v\n", err)
return
}
fmt.Printf("IP: %s 位于: %s %s\n", info.IP, info.Region, info.City)
}
⚠️ 使用建议
💡 最佳实践
- 添加应用层缓存:避免频繁重复查询同一IP
- 遵守服务商条款:合理使用,避免滥用
- 企业项目考虑付费:生产环境建议使用付费API
🔧 性能优化
// 建议在应用层添加缓存
var ipCache = make(map[string]*geoip.Info)
func getGeoInfo(ip string) (*geoip.Info, error) {
if info, exists := ipCache[ip]; exists {
return info, nil
}
// 查询并缓存
info, err := engine.Lookup(ctx, ip)
if err == nil {
ipCache[ip] = info
}
return info, err
}
🚀 项目地址
GitHub: github.com/ixugo/netpu…
Go模块: github.com/ixugo/netpulse
⭐ 点亮Star,助力开源!
如果你觉得这个项目对你有帮助,请在GitHub上给项目点个 Star ⭐!让我们一起构建开源生态。
🤝 贡献与反馈
欢迎提交Issue和Pull Request!让我们一起让这个库变得更好。