2024年Go最全Golang — 根据IP获取地理位置信息_golang geoip,血与泪的总结
package main
import (
"fmt"
"github.com/oschwald/maxminddb-golang"
)
func getGeoIPCountry(mmdb *maxminddb.Reader, ip string) (string, error) {
var result interface{}
err := mmdb.Lookup(ip, &result)
if err != nil {
return "", err
}
country, found := result.(map[string]interface{})["country"].(map[string]interface{})["names"].(map[string]interface{})["en"]
if !found {
return "", fmt.Errorf("country not found")
}
return country.(string), nil
}
func main() {
// 示例:使用GeoIP数据库查询IP地址的国家信息
var mmdb *maxminddb.Reader
// 以下为示例,实际使用时需要根据实际情况打开数据库文件
// var err error
// mmdb, err = maxminddb.Open("GeoLite2-Country.mmdb")
// if err != nil {
// log.Fatal(err)
// }
defer mmdb.Close() // 确保数据库在main函数结束时关闭
ip := "208.77.168.131" // 示例IP地址
country, err := getGeoIPCountry(mmdb, ip)
if err != nil {
fmt.Printf("Error: %s\n", err)
} else {
fmt.Printf("The IP address %s is located in %s.\n", ip, country)
}
}
这个代码示例展示了如何使用maxminddb-golang
库来查询一个IP地址的国家信息。首先,它尝试打开GeoIP数据库,然后定义了一个函数getGeoIPCountry
来查询指定IP的国家信息。最后,在main
函数中,它使用示例IP地址来调用这个函数,并处理可能发生的错误。
评论已关闭