如何检测两个Golang net.IPNet对象之间是否存在交集?
也就是说,如何检查双方如果第一个网络是第二个子网或如果第二网络是第一个子网.
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) }