我正在尝试操作 golang sync.Map 的 sync.Map,但我在转换时遇到了一些问题。我有以下代码:
func (cluster *Cluster) action(object1, object2 MyObject) {
value, _ := cluster.globalMap.LoadOrStore(object1.name, sync.Map{})
localMap := value.(sync.Map)
localMap.Store(object2.Name, object2)
value2, _ := cluster.resourceInflight.Load(node.Name)
forComparison := value2.(sync.Map)
fmt.Println(localMap.Load(object2.Name))
fmt.Println(forComparison.Load(object2.Name))
}
{myObject map[] map[]} true
<nil> false
我这样做是因为我希望保持 localMap 线程的内容安全。
问题是我希望我的两个打印结果相同,因为“forComparison”应该指向与“localMap”相同的对象。但第二个结果为零。
我怀疑问题出在将接口“值”转换为实际的“sync.Map”。但我不确定如何使用内联转换调用 .Store 方法。
我考虑过将 localMap 存储在 cluster.globalMap 中,但这对我来说似乎不正确,因为它会破坏使用 localSyncMap 的全部意义并产生并发问题。
关于我应该做什么的任何意见?
杨__羊羊
相关分类