package geoip import ( "net" geoip2 "github.com/oschwald/geoip2-golang" ) var db *geoip2.Reader // NewReader - func NewReader() (*geoip2.Reader, error) { var err error db, err = geoip2.Open("/data/GeoLite2-City.mmdb") return db, err } // GeoStruct - type GeoStruct struct { City string `json:"city"` Country struct { Name string `json:"name"` Code string `json:"code"` } `json:"country"` Timezone string `json:"timezone"` Location struct { Latitude float64 `json:"latitude"` Longitude float64 `json:"longtitude"` } `json:"location"` } // QueryGEO - func QueryGEO(input string) (geo *GeoStruct, err error) { ip := net.ParseIP(input) record, err := db.City(ip) if err != nil { return } geo = &GeoStruct{} geo.City = record.City.Names["en"] geo.Timezone = record.Location.TimeZone geo.Location.Latitude = record.Location.Latitude geo.Location.Longitude = record.Location.Longitude geo.Country.Code = record.Country.IsoCode geo.Country.Name = record.Country.Names["en"] return }