既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
import (
“fmt”
“github.com/lionsoul2014/ip2region/binding/golang/xdb”
“net”
“time”
)
func main() {
ip2region()
}
func ip2region() {
var dbPath = “iputil/ip2region/ip2region.xdb”
searcher, err := xdb.NewWithFileOnly(dbPath)
if err != nil {
fmt.Printf(“failed to create searcher: %s\n”, err.Error())
return
}
defer searcher.Close()
var ip = "115.223.9.122"
var tStart = time.Now()
ips, err := net.LookupIP("www.github.com")
ipres := ips[0].String()
fmt.Printf("域名的ip:%s\n", ipres)
region, err := searcher.SearchByStr(ip)
if err != nil {
fmt.Printf("failed to SearchIP(%s): %s\n", ip, err)
return
}
fmt.Printf("{region: %s, took: %s}\n\n", region, time.Since(tStart))
// 备注:并发使用,每个 goroutine 需要创建一个独立的 searcher 对象。
}
结果:
域名的ip:20.205.243.166
{region: 中国|0|浙江省|温州市|电信, took: 70.8846ms}
### 2.2 geoip2-golang
`geoip2-golang`只是一个使用示例,它所需的IP地理信息库是基于`MaxMind`提供的 `GeoLite2` 和 `GeoIP2` 数据库。所以需要去`MAXMID`官网注册账号,然后才能下载最新的`IP地理位置库`。
1. 注册
地址:<https://www.maxmind.com/en/geolite2/signup>,除了邮箱外,其他都不需要真实信息。
2. 登录
3. 下载最新的`IP地理位置库`
登陆后点击 **Download Databases**进入下载选择页面

4. 下载库文件
maxmind提供了六种免费的数据库,有`mmdb`【推荐】,也有`csv`格式。你也可以全部下载下来看看。
**ASN数据库**
从图中可以看到有些数据库的标题后面写着“ASN”三个字母,这个ASN的指的就是ip-运营商信息的数据库。
**mmdb数据库**
`mmdb`是`maxmind`自己的一种二进制数据库格式,它提供较快的ip查询速度。
这里我们只下载不是`CSV格式`的库文件即可,即只下载红色圈起来的,右侧是下载按钮。
**注意**:`MAXMIND`会记录下载,所以不要反复下载,以免被禁。

5. 库文件
* GeoLite2-ASN\_20230505.tar.gz
* GeoLite2-City\_20230505.tar.gz
* GeoLite2-Country\_20230505.tar.gz
解压后都是**mmdb数据库**类型,具体差别自己测试吧。
6. 使用
* 下载`geoip2-golang`
go get github.com/oschwald/geoip2-golang
代码示例:
package main
import (
“fmt”
“github.com/lionsoul2014/ip2region/binding/golang/xdb”
“github.com/oschwald/geoip2-golang”
“log”
“net”
“time”
)
func main() {
ip2region()
geoip()
}
func ip2region() {
var dbPath = “iputil/ip2region/ip2region.xdb”
searcher, err := xdb.NewWithFileOnly(dbPath)
if err != nil {
fmt.Printf(“failed to create searcher: %s\n”, err.Error())
return
}
defer searcher.Close()
var ip = "115.223.9.122"
var tStart = time.Now()
ips, err := net.LookupIP("www.github.com")
ipres := ips[0].String()
fmt.Printf("域名的ip:%s\n", ipres)
region, err := searcher.SearchByStr(ip)
if err != nil {
fmt.Printf("failed to SearchIP(%s): %s\n", ip, err)
return
}
fmt.Printf("{region: %s, took: %s}\n\n", region, time.Since(tStart))
// 备注:并发使用,每个 goroutine 需要创建一个独立的 searcher 对象。
}
func geoip() {
db, err := geoip2.Open(“iputil/geolite2/GeoLite2-City.mmdb”)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// If you are using strings that may be invalid, check that ip is not nil
//ip := net.ParseIP(“81.2.69.142”)
ip := net.ParseIP(“115.192.211.101”)
record, err := db.City(ip)
if err != nil {
log.Fatal(err)
}
fmt.Printf(“Portuguese (BR) city name: %v\n”, record.City.Names[“pt-BR”])
if len(record.Subdivisions) > 0 {
fmt.Printf(“English subdivision name: %v\n”, record.Subdivisions[0].Names[“en”])
}
fmt.Printf(“Russian country name: %v\n”, record.Country.Names[“ru”])
fmt.Printf(“ISO country code: %v\n”, record.Country.IsoCode)
fmt.Printf(“Time zone: %v\n”, record.Location.TimeZone)
fmt.Printf(“Coordinates: %v, %v\n”, record.Location.Latitude, record.Location.Longitude)
// Output:
// Portuguese (BR) city name: Londres
// English subdivision name: England
// Russian country name: Великобритания
// ISO country code: GB
// Time zone: Europe/London
// Coordinates: 51.5142, -0.0931
fmt.Println("中文结果")
fmt.Printf("Portuguese (BR) city name: %v\n", record.City.Names["zh-CN"])
if len(record.Subdivisions) > 0 {
fmt.Printf("English subdivision name: %v\n", record.Subdivisions[0].Names["zh-CN"])
}
fmt.Printf("Russian country name: %v\n", record.Country.Names["zh-CN"])
fmt.Printf("ISO country code: %v\n", record.Country.IsoCode)
fmt.Printf("Time zone: %v\n", record.Location.TimeZone)
fmt.Printf("Coordinates: %v, %v\n", record.Location.Latitude, record.Location.Longitude)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新