Go 用递增函数填充结构映射
我试图用字符串键和指向结构值的指针填充映射。特别是,在填充一个字段时出现问题,需要通过调用函数在另一个数组的范围内递增该字段 我遇到的问题是第31行 我希望这两个值是:Go 用递增函数填充结构映射,go,Go,我试图用字符串键和指向结构值的指针填充映射。特别是,在填充一个字段时出现问题,需要通过调用函数在另一个数组的范围内递增该字段 我遇到的问题是第31行 我希望这两个值是: m["string1"].bgp.tag == 10.10.10.0 m["string2"].bgp.tag == 10.10.10.4 …函数NextIP正在正确返回。但是在阅读地图时,以前的m[“string1”].bgp.tag值似乎被新值覆盖了?他们都是10.10.10.8;我对此非常困惑。我做错了什么?是一个字节片
m["string1"].bgp.tag == 10.10.10.0
m["string2"].bgp.tag == 10.10.10.4
…函数NextIP正在正确返回。但是在阅读地图时,以前的m[“string1”].bgp.tag值似乎被新值覆盖了?他们都是10.10.10.8;我对此非常困惑。我做错了什么?是一个字节片
基本上,您一直在修改mIP并存储它。但是由于这种方式,您实际上存储了一个指向底层数据的指针
解决问题的一个快速方法是存储一份mIP
。例如:
for _, v := range s {
tmpIP := make([]byte, len(mIP))
copy(tmpIP, mIP)
m[v] = &nbrStruct{
bgp: bgp{
tag: tmpIP,
},
}
mIP, _ = NextIP(mIP, 4)
}
这将产生正确的输出:
key: string1 ---> tag: 10.10.10.0
key: string2 ---> tag: 10.10.10.4
我强烈建议您更改
NextIP
以返回新的IP,而不是输入的修改版本。Aaah。我应该提到我是一个游手好闲的人;在使用界面等方面有点过于自信,忽略了一些基础知识。从切片上吸取的教训。谢谢你,马克!
for _, v := range s {
tmpIP := make([]byte, len(mIP))
copy(tmpIP, mIP)
m[v] = &nbrStruct{
bgp: bgp{
tag: tmpIP,
},
}
mIP, _ = NextIP(mIP, 4)
}
key: string1 ---> tag: 10.10.10.0
key: string2 ---> tag: 10.10.10.4