为了账号安全,请及时绑定邮箱和手机立即绑定

将 CIDR 块转换为 net.IP 类型

将 CIDR 块转换为 net.IP 类型

Go
慕工程0101907 2023-07-31 16:18:26
我有这段代码:// 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/24INFO[0000] cidr: {192.168.100.0 ffffff00}, ipmask: ffffff00我无法理解命令行参数 192.168.100.0/24 在哪个阶段被转换为 net.IP 和掩码。查看IPNet代码func newIPNetValue(val net.IPNet, p *net.IPNet) *ipNetValue {    *p = val    return (*ipNetValue)(p) }// allocates default to pointer to net.IPNet if provided没有任何代码可以将输入转换为显示的输出。如何根据 cidr 块的输入计算并打印掩码值。请任何指点。
查看完整描述

1 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

好吧,这在根上用作标志,而标志需要flag.Value接口。该接口所需要的只是它是 aStringer并且它实现了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

}

查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信