我有一個像下面的結構,約100k entires。Golang在非常大的結構中查找ip範圍
我想循環它,並檢查IP地址是否在範圍內。
我當前的代碼:
type Users struct {
Id string
Descr string
IpStart string
IpEnd string
}
var users []*Users
func LookUpIP(IpAddress string) (string, string) {
iptocheck := net.ParseIP(IpAddress)
for _, elem := range users {
if bytes.Compare(iptocheck, elem.IpStart) >= 0 && bytes.Compare(iptocheck, elem.IpEnd) <= 0 {
fmt.Printf("%v is between %v and %v\n", IpAddress, elem.IpStart, elem.IpEnd)
return elem.Id, elem.Descr
}
}
return "0", "null"
}
以上正常工作與40K左右entires但在它得到慢。有沒有更快的方法來找出一個IP地址是否在我的結構內的範圍內?
更新:現在只能解析IP一次,把它作爲數量結構
只是最初的想法是將用戶信息存儲在地圖中,以ip地址作爲密鑰。然後在搜索時不必循環訪問IP地址。 – Wade73
我可以這樣做,因爲我想知道ip:123.123.123.123是否在123.123.123.1和123.123.123.250範圍內? – mjhd
知識產權是否會落入多個範圍?意思是說'123.123.123.123'是否適用於'123.123.123.1 - > 123.123.123.250'和'123.123.123.128 - > 123.123.124.1'範圍內的2+用戶的範圍? – sberry