// Copyright 2022 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cloud . package iplibrary type Country struct { Id uint16 `json:"id"` Name string `json:"name"` Codes []string `json:"codes"` } type Province struct { Id uint16 `json:"id"` Name string `json:"name"` Codes []string `json:"codes"` } type City struct { Id uint32 `json:"id"` Name string `json:"name"` Codes []string `json:"codes"` } type Town struct { Id uint32 `json:"id"` Name string `json:"name"` Codes []string `json:"codes"` } type Provider struct { Id uint16 `json:"id"` Name string `json:"name"` Codes []string `json:"codes"` } type Meta struct { Version int `json:"version"` // IP库版本 Code string `json:"code"` // 代号,用来区分不同的IP库 Author string `json:"author"` Countries []*Country `json:"countries"` Provinces []*Province `json:"provinces"` Cities []*City `json:"cities"` Towns []*Town `json:"towns"` Providers []*Provider `json:"providers"` CreatedAt int64 `json:"createdAt"` countryMap map[uint16]*Country // id => *Country provinceMap map[uint16]*Province // id => *Province cityMap map[uint32]*City // id => *City townMap map[uint32]*Town // id => *Town providerMap map[uint16]*Provider // id => *Provider } func (this *Meta) Init() { this.countryMap = map[uint16]*Country{} this.provinceMap = map[uint16]*Province{} this.cityMap = map[uint32]*City{} this.townMap = map[uint32]*Town{} this.providerMap = map[uint16]*Provider{} for _, country := range this.Countries { this.countryMap[country.Id] = country } for _, province := range this.Provinces { this.provinceMap[province.Id] = province } for _, city := range this.Cities { this.cityMap[city.Id] = city } for _, town := range this.Towns { this.townMap[town.Id] = town } for _, provider := range this.Providers { this.providerMap[provider.Id] = provider } } func (this *Meta) CountryWithId(countryId uint16) *Country { return this.countryMap[countryId] } func (this *Meta) ProvinceWithId(provinceId uint16) *Province { return this.provinceMap[provinceId] } func (this *Meta) CityWithId(cityId uint32) *City { return this.cityMap[cityId] } func (this *Meta) TownWithId(townId uint32) *Town { return this.townMap[townId] } func (this *Meta) ProviderWithId(providerId uint16) *Provider { return this.providerMap[providerId] }