为什么DefaultMask()方法在Golang中有一个IP类型的接收器



我在这里查看了Golang源代码和net包下的DefaultMask((,我不明白的是为什么这个函数不是一个包函数(没有接收器(,所以从我的垂直、正确的调用应该是:

ip := net.ParseIP("192.168.1.1")
i := ip.Mask(net.DefaultMask()) // <---- 

而不是:

ip := net.ParseIP("192.168.1.1")
i := ip.Mask(ip.DefaultMask()) <----

IPv4默认掩码与经典的IPv4分配有关,这主要是历史事件。

A类IP从0.0.0.0上升到127..255.255.255,B类上升到191.255.255.255C类上升到223.255.255.255.255。因此,可以简单地通过查看IP地址的第一段来确定类掩码。这就是DefaultMask()获取IP地址的原因。

例如,IP 192.168.1.1是C类,因此它的默认子网掩码是255.255.255.0。

类掩码在互联网上是不相关的,因为它只使用CIDR(和IPv6(。

如果查看源代码,您可以了解原因。它需要知道类:

switch {
case ip[0] < 0x80:
return classAMask
case ip[0] < 0xC0:
return classBMask
default:
return classCMask
}

相关内容

最新更新