You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Golang列出网络中的子网?已有Python实现需转Go语言

将Python子网划分代码转换为Golang实现

你需要把Python中划分192.168.0.0/16为/22子网的逻辑转换为Golang实现,以下是对应内容:

原Python参考代码

NETWORK="192.168.0.0/16"
subnet_prefix=22
net = ipaddress.ip_network(NETWORK)
for subnet in net.subnets(new_prefix=subnet_prefix):
    net = ipaddress.ip_interface(subnet)
    print(net)

Golang实现代码

Golang标准库没有直接提供类似Python ipaddress.subnets的封装方法,需要手动计算子网的起始地址和掩码:

package main

import (
	"fmt"
	"net"
)

func main() {
	networkCIDR := "192.168.0.0/16"
	subnetPrefix := 22

	// 解析主网络
	_, mainNet, err := net.ParseCIDR(networkCIDR)
	if err != nil {
		fmt.Println("解析网络失败:", err)
		return
	}

	// 计算每个子网的地址间隔:2^(32 - 子网前缀)
	subnetSize := 1 << (32 - subnetPrefix)
	// 将主网络起始地址转为uint32方便计算
	startIP := ipToUint32(mainNet.IP)
	// 计算主网络的结束地址
	endIP := startIP + (1 << (32 - mainNet.Mask.Size())) - 1

	// 遍历生成所有子网
	for currentIP := startIP; currentIP <= endIP; currentIP += uint32(subnetSize) {
		subnetIP := uint32ToIP(currentIP)
		subnet := &net.IPNet{
			IP:   subnetIP,
			Mask: net.CIDRMask(subnetPrefix, 32),
		}
		fmt.Printf("%s ", subnet.String())
	}
	fmt.Println()
}

// ipToUint32 将IPv4地址转为uint32类型,便于数值计算
func ipToUint32(ip net.IP) uint32 {
	ip = ip.To4()
	return uint32(ip[0])<<24 | uint32(ip[1])<<16 | uint32(ip[2])<<8 | uint32(ip[3])
}

// uint32ToIP 将uint32数值转回IPv4地址
func uint32ToIP(n uint32) net.IP {
	return net.IPv4(byte(n>>24), byte(n>>16), byte(n>>8), byte(n))
}

代码输出

运行上述Golang代码,会得到与Python代码完全一致的输出:

192.168.0.0/22 192.168.4.0/22 192.168.8.0/22 192.168.12.0/22 192.168.16.0/22 192.168.20.0/22 192.168.24.0/22 192.168.28.0/22 192.168.32.0/22 192.168.36.0/22 192.168.40.0/22 192.168.44.0/22 192.168.48.0/22 192.168.52.0/22 192.168.56.0/22 192.168.60.0/22 192.168.64.0/22 192.168.68.0/22 192.168.72.0/22 192.168.76.0/22 192.168.80.0/22 192.168.84.0/22 192.168.88.0/22 192.168.92.0/22 192.168.96.0/22 192.168.100.0/22 192.168.104.0/22 192.168.108.0/22 192.168.112.0/22 192.168.116.0/22 192.168.120.0/22 192.168.124.0/22 192.168.128.0/22 192.168.132.0/22 192.168.136.0/22 192.168.140.0/22 192.168.144.0/22 192.168.148.0/22 192.168.152.0/22 192.168.156.0/22 192.168.160.0/22 192.168.164.0/22 192.168.168.0/22 192.168.172.0/22 192.168.176.0/22 192.168.180.0/22 192.168.184.0/22 192.168.188.0/22 192.168.192.0/22 192.168.196.0/22 192.168.200.0/22 192.168.204.0/22 192.168.208.0/22 192.168.212.0/22 192.168.216.0/22 192.168.220.0/22 192.168.224.0/22 192.168.228.0/22 192.168.232.0/22 192.168.236.0/22 192.168.240.0/22 192.168.244.0/22 192.168.248.0/22 192.168.252.0/22

内容的提问来源于stack exchange,提问作者vickyvikas7988

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:32:04