1.进入后,开头部分会告诉下载ip库,打开页面

找到下载地址

/www/test/ip/GeoLite2-City_20180327/GeoLite2-City.mmdb

2.下载(按照readme步骤)

go get github.com/oschwald/geoip2-golang

安装的过程报错:

package golang.org/x/sys/unix: unrecognized import path "golang.org/x/sys/unix" (https fetch: Get https://golang.org/x/sys/unix?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

被长城墙了,您可以这这么操作:(参看 http://www.fecshop.com/topic/805)

cd ~/go/src
mkdir -p golang.org/x
cd golang.org/x
git clone https://github.com/golang/sys.git

下载完成后,重新安装

 go get github.com/oschwald/geoip2-golang

即可完成。

完成后,在main包里面新建ip.go

package main

import (
    "fmt"
    "github.com/oschwald/geoip2-golang"
    "log"
    "net"
)

func main() {
    db, err := geoip2.Open("/www/test/ip/GeoLite2-City_20180327/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("120.24.37.249")
    record, err := db.City(ip)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Portuguese (BR) city name: %v\n", record.City.Names["zh-CN"])
    fmt.Printf("English subdivision name: %v\n", record.Subdivisions[0].Names["en"])
    fmt.Printf("Russian country name: %v\n", record.Country.Names["en"])
    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
}
db, err := geoip2.Open("/www/test/ip/GeoLite2-City_20180327/GeoLite2-City.mmdb")
go run ip.go
Portuguese (BR) city name: 杭州
English subdivision name: Zhejiang
Russian country name: China
ISO country code: CN
Time zone: Asia/Shanghai
Coordinates: 30.2936, 120.1614

OK。