gpt4 book ai didi

loops - 映射中键的值会在golang中自动更改

转载 作者:行者123 更新时间:2023-12-01 21:16:07 24 4
gpt4 key购买 nike

因此,我有这种resolve类型的var map[string][]byte,可以通过调用方法进行初始化。如果我只是迭代resolve,那么该值可以正确打印。

for k, v := range resolve {
fmt.Printf("%s\t%s\n", k, v)
}
但是在下一行中,我尝试遍历 map 以将值存储在db( bolt)中,因为 map 中的键( key1)的值正在自动更改,因此我无法弄清楚为什么。
为了进一步简化我所做的工作,将该键的值存储在新的变量中
a:= resolve["key1"]
然后在将值存储在数据库中时,我检查了 key 是否为 key1a。在这种情况下, a的值也将更改,但不应更改。
gist具有代码,我们将能够看到第30行中的 resolve已在第34行中进行了更改。
我已经在操场上添加了代码,这里是链接
https://play.golang.org/p/2WacK-xxRp_m

最佳答案

在您的readAll行中:

lGraceP[string(k)] = v
您正在存储值供以后使用。文档指定事务结束后,值 v无效。
在 bolt 库的 Cursor.First 中(并且 Cursor.Next中有类似的文本)(请参见突出显示的文本):

First moves the cursor to the first item in the bucket and returns itskey and value. If the bucket is empty then a nil key and value arereturned. The returned key and value are only valid for the life ofthe transaction.


键和值仅在事务生命周期内有效的方式是,重新使用其片下的数组。这会导致您的值发生意外变化。

关于loops - 映射中键的值会在golang中自动更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62910590/

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