我有一个像下面这样的结构,大约有 10 万个。
我想遍历它并检查 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 的整数工作正常,但超过它会变慢。有没有更快的方法来确定一个 ip 地址是否在我的结构内的范围内?
更新:现在只解析一次 IP 并将其存储为结构中的数字
心有法竹
有只小跳蛙
繁花不似锦
随时随地看视频慕课网APP
相关分类