如何检测两个Golang net.IPNet对象之间是否存在交集?
也就是说,如何检查双方是否第一网络子网中的第二个的OR如果第二网络是第一个子网。
Go是否提供了可用于此特定任务的实用程序功能?
请参阅下面的测试代码。
package main
import (
"fmt"
"net"
)
func main() {
_, net1, _ := net.ParseCIDR("1.1.1.1/24")
_, net2, _ := net.ParseCIDR("1.1.0.2/16")
_, net3, _ := net.ParseCIDR("1.1.1.3/25")
_, net4, _ := net.ParseCIDR("1.2.0.4/16")
test(net1, net2, true)
test(net2, net1, true)
test(net1, net3, true)
test(net3, net1, true)
test(net1, net4, false)
test(net4, net1, false)
}
func test(n1, n2 *net.IPNet, expect bool) {
result := intersect(n1, n2)
var label string
if result == expect {
label = "good"
} else {
label = "FAIL"
}
fmt.Printf("test intersect(%v,%v)=%v expected=%v => %s\n", n1, n2, result, expect, label)
}
func intersect(n1, n2 *net.IPNet) bool {
return false // FIXME WRITEME
}
在Go Playground上运行
如果(正如您的测试用例所暗示的那样)您不关心哪一面包含哪一面,而只是担心有重叠,则这足够了。
func intersect(n1, n2 *net.IPNet) bool {
return n2.Contains(n1.IP) || n1.Contains(n2.IP)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句