IP address/subnet 掩码(点十进制)的 golang CIDR 前缀表示法

golang CIDR prefix notation to IP address/subnet mask (dot-decimal)

在 golang 中是否有类似于 'npm netmask' 的东西?我需要将 10.0.0.0/8 转换为 10.0.0.0/255.0.0.0 所以基本上是 CIDR 格式的网络掩码到点十进制。

var Netmask = require('netmask').Netmask
var block = new Netmask('10.0.0.0/8');
block.mask; // 255.0.0.0

我在/golang中找不到它。org/src/net/ip.go

go 标准库没有创建该表示的函数。话虽这么说,自己做也不难:

https://play.golang.org/p/XT_UXoy6ra

func main() {
    _, ipv4Net, err := net.ParseCIDR("10.0.0.0/8")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(ipv4MaskString(ipv4Net.Mask))
}

func ipv4MaskString(m []byte) string {
    if len(m) != 4 {
        panic("ipv4Mask: len must be 4 bytes")
    }

    return fmt.Sprintf("%d.%d.%d.%d", m[0], m[1], m[2], m[3])
}

请记住,此格式仅适用于 ipv4 掩码。如果你要传递一个 ipv6 掩码,这会 panic。