Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 用递增函数填充结构映射_Go - Fatal编程技术网

Go 用递增函数填充结构映射

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;我对此非常困惑。我做错了什么?是一个字节片

我试图用字符串键和指向结构值的指针填充映射。特别是,在填充一个字段时出现问题,需要通过调用函数在另一个数组的范围内递增该字段

我遇到的问题是第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;我对此非常困惑。我做错了什么?

是一个字节片

基本上,您一直在修改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