1 Star 0 Fork 0

烟熏牛肉干/go-area

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
area_region.go 1.59 KB
一键复制 编辑 原始数据 按行查看 历史
package area
import (
"embed"
"fmt"
"github.com/lionsoul2014/ip2region/binding/golang/xdb"
"strings"
)
//go:embed ip2region.xdb
var ip2regionFile embed.FS
var ipBuff []byte
//goland:noinspection GoBoolExpressions
func initRegion() {
var err error
// 读取嵌入的文件内容
ipBuff, err = ip2regionFile.ReadFile("ip2region.xdb")
if err != nil {
result := fmt.Errorf("加载归属地数据库数据失败 `%s`: %s", "ip2region.xdb", err)
panic(result)
}
}
func queryIpRegion(ip string) (string, error) {
searcher, err := xdb.NewWithBuffer(ipBuff)
if err != nil {
return "", fmt.Errorf("创建searcher失败: %v", err)
}
defer searcher.Close()
//startTime := time.Now()
region, err := searcher.SearchByStr(ip)
if err != nil {
return "", fmt.Errorf("查询ip失败(%s): %v", ip, err)
}
//log.Printf("查询耗时: %s", time.Since(startTime)) // 打印查询耗时
return region, nil
}
func GetIpRegion(ip string) (Area, error) {
// 1、调用IP库查询
region, err := queryIpRegion(ip)
if err != nil {
return Area{}, fmt.Errorf("IP:%s,归属地获取失败", ip)
}
// 2、分析查询结果(中国|0|山东省|青岛市|联通)
regionArr := strings.Split(region, "|")
provinceKeyword := regionArr[2]
cityKeyword := regionArr[3]
// 3、搜索省份
province, found := SearchProvinceByTitle(provinceKeyword)
if !found {
return Area{}, fmt.Errorf("未找到归属省份:%s", region)
}
// 4、搜索城市
city, found := SearchCityByTitle(province.ID, cityKeyword)
if !found {
return Area{}, fmt.Errorf("未找到归属城市:%s", region)
}
return city, nil
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/love_bass/go-area.git
git@gitee.com:love_bass/go-area.git
love_bass
go-area
go-area
v0.0.6

搜索帮助