gpt4 book ai didi

go - 将 CIDR block 转换为 net.IP 类型

转载 作者:行者123 更新时间:2023-12-01 22:17:33 29 4
gpt4 key购买 nike

我有这段代码:

// 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 和掩码。

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 block 计算和打印掩码值。请任何指点。

最佳答案

好吧,这是在根目录中用作标志,并且标志需要 flag.Value界面。该接口(interface)所需要的只是它是一个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
}

这将我们引向 https://golang.org/pkg/net/#ParseCIDR .

来源: https://golang.org/src/net/ip.go?s=16363:16407#L699

关于go - 将 CIDR block 转换为 net.IP 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58600784/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com