Go 将CIDR块转换为net.IP类型
我有一段代码:Go 将CIDR块转换为net.IP类型,go,networking,Go,Networking,我有一段代码: // redacted var ( cidr net.IPNet createCmd = &cobra.Command{ Use: "create", Short: "create would create something useful", Long: "create submits a request for something u
// redacted
var (
cidr net.IPNet
createCmd = &cobra.Command{
Use: "create",
Short: "create would create something useful",
Long: "create submits a request for something useful creation based on parameters provided ",
Run: func(cmd *cobra.Command, args []string) {
//region comes from rootCmd
log.Infof("cidr: %v, ipmask: %v", cidr, cidr.IP.DefaultMask())
},
}
)
func init() {
createCmd.Flags().IPNetVar(&cidr, "vpc-cidr", cidr, "Vpc cidr range")
}
// redacted
输出:
./somethinguseful create --cidr 192.168.100.0/24
INFO[0000] cidr: {192.168.100.0 ffffff00}, ipmask: ffffff00
我无法理解命令行参数192.168.100.0/24在什么阶段转换为net.IP和掩码
查看代码
没有将输入转换为显示输出的代码。如何根据cidr块的输入计算和打印掩码值。请使用任何指针。嗯,这在根目录中用作标志,标志需要接口。这个接口所需要的只是它是一个
Stringer
,并且它实现Set(string)error
ipNetValue
正是这样做的
func (ipnet ipNetValue) String() string {
n := net.IPNet(ipnet)
return n.String()
}
func (ipnet *ipNetValue) Set(value string) error {
_, n, err := net.ParseCIDR(strings.TrimSpace(value))
if err != nil {
return err
}
*ipnet = ipNetValue(*n)
return nil
}
这让我们想到了
资料来源:
func (ipnet ipNetValue) String() string {
n := net.IPNet(ipnet)
return n.String()
}
func (ipnet *ipNetValue) Set(value string) error {
_, n, err := net.ParseCIDR(strings.TrimSpace(value))
if err != nil {
return err
}
*ipnet = ipNetValue(*n)
return nil
}