在Go中将网络掩码转换为CIDR

在Go中将网络掩码转换为CIDR,go,Go,我正在寻找一种在Go中将网络掩码字符串转换为CIDR符号的方法 例如,“255.255.255.0”->“/24” 我目前正在使用下面的逻辑获取一个IP地址和网络掩码字符串,这可能会使事情变得复杂 我一直在阅读net库,试图看看是否有一个不同的函数可以用来实现我想要的功能,这实际上只是CIDR表示法中的一个IP地址: 192.168.1.2/24 这一点一开始并不明显,但: addr := ip.To4() sz, _ := net.IPV4Mask(addr[0], addr[1], add

我正在寻找一种在Go中将网络掩码字符串转换为CIDR符号的方法

例如,“255.255.255.0”->“/24”

我目前正在使用下面的逻辑获取一个IP地址和网络掩码字符串,这可能会使事情变得复杂

我一直在阅读
net
库,试图看看是否有一个不同的函数可以用来实现我想要的功能,这实际上只是CIDR表示法中的一个IP地址:

192.168.1.2/24

这一点一开始并不明显,但:

addr := ip.To4()
sz, _ := net.IPV4Mask(addr[0], addr[1], addr[2], addr[3]).Size()

我不知道这样的函数是否存在,但创建这样的函数很容易

CIDR表示法只是网络掩码中的设置位计数

因此,粗溶液可以是:

func-cidr(网络掩码字符串)int{
var掩码uint32
对于idx,点部分:=范围字符串.Split(网络掩码“.”){
部分:=strconv.Atoi(dotpart)

mask=mask | uint32(part)“IPV4Mask”应该是“IPV4Mask”,小写字母v。难道你不能像这样使用转换():
sz,:=net.IPMask(ip.To4()).Size()
addr := ip.To4()
sz, _ := net.IPV4Mask(addr[0], addr[1], addr[2], addr[3]).Size()