当尝试在 go 中追加迭代的值时,该函数将最后一次迭代追加 4 次。例如,我正在尝试将包含网卡数据的字符串解析为地图,并且在迭代时仅附加最后一个:这是带有代码的游乐场链接: https ://go.dev/play/p/mKtFvK36PMnpackage mainimport ( "fmt" "strings")type Foo struct { val int}func main() { NetworkJson := "4 NIC(s) Installed.,[01]: Realtek PCIe GbE Family Controller, Connection Name: Ethernet, DHCP Enabled: Yes, DHCP Server: 10.101.10.13, IP address(es), [01]: 10.1.2.62,[02]: VirtualBox Host-Only Ethernet Adapter, Connection Name: VirtualBox Host-Only Network, DHCP Enabled: No, IP address(es), [01]: 192.168.56.1, [02]: fe80::4c17:978a:2c91:8e27,[03]: VMware Virtual Ethernet Adapter for VMnet1, Connection Name: VMware Network Adapter VMnet1, DHCP Enabled: Yes, DHCP Server: 192.168.146.254, IP address(es), [01]: 192.168.146.1, [02]: fe80::88b4:d443:2ab8:59b5,[04]: VMware Virtual Ethernet Adapter for VMnet8, Connection Name: VMware Network Adapter VMnet8, DHCP Enabled: Yes, DHCP Server: 192.168.128.254, IP address(es), [01]: 192.168.128.1, [02]: fe80::a40d:e64:fa9f:e82f" var IPs []string var Data []string var IPMap = make(map[string]string) var CardMap = make(map[string]interface{}) var CardIP = make(map[string][]map[string]string) var NetCard = make(map[string][]interface{}) // Faz loop entre as placas de rede for _, Cards := range strings.Split(string(NetworkJson), ",[") { // Faz loop entre os dados de cada placa for _, CardData := range strings.Split(string(Cards), ",") { // Verifica se dado inicia com espaço em branco if strings.HasPrefix(CardData, " ") { // Verifica se dado sem o espaço em branco começa com [ if strings.HasPrefix(strings.TrimSpace(CardData), "[") { } } }
1 回答
天涯尽头无女友
TA贡献1831条经验 获得超9个赞
您将所有内容都存储到同一个地图变量 CardMap 中,并且您使用的是单数键“Card Name”。append(NetCard["Cards"], CardMap)不执行 CardMap 的深拷贝,仅附加浅拷贝,因此每次迭代都会更新浅拷贝的数据。你的其他变量有同样的问题。
将变量声明移动到主循环中:
var NetCard = make(map[string][]interface{})
// Faz loop entre as placas de rede
for _, Cards := range strings.Split(string(NetworkJson), ",[") {
var IPs []string
var Data []string
var IPMap = make(map[string]string)
var CardMap = make(map[string]interface{})
var CardIP = make(map[string][]map[string]string)
// Faz loop entre os dados de cada placa
for _, CardData := range strings.Split(string(Cards), ",") {
// ...
https://go.dev/play/p/VE_VWOsvsna
- 1 回答
- 0 关注
- 139 浏览
添加回答
举报
0/150
提交
取消