当前位置:  开发笔记 > 编程语言 > 正文

如何检测两个Golang net.IPNet对象是否相交?

如何解决《如何检测两个Golangnet.IPNet对象是否相交?》经验,为你挑选了1个好方法。

如何检测两个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上运行它



1> dahc..:

如果(因为你的测试用例似乎暗示)你不关心哪一方包含哪一方,但只是有重叠,这应该足够了.

func intersect(n1, n2 *net.IPNet) bool {
    return n2.Contains(n1.IP) || n1.Contains(n2.IP)
}


@evanmcdonnal我不确定你的意思.IPNet.IP是网络号,而不是解析的IP,我们只需要收容.
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有