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
}