gpt4 book ai didi

go - 如何在非常大的结构中找到范围内的ip

转载 作者:数据小太阳 更新时间:2023-10-29 03:06:20 25 4
gpt4 key购买 nike

我有一个如下所示的结构,包含大约 100k 个整体。

我想遍历它并检查 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 并将其作为数字存储在结构中

最佳答案

我看到了两个简单的步骤。

  1. 进行一次解析并将 IP 地址存储为单个数字。
  2. 按范围的开头对范围进行排序并使用 binary search .

关于go - 如何在非常大的结构中找到范围内的ip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36081938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com