我有一些应该增加计数的代码。

这是包含count变量的结构:

type PipelineData struct {
    nodeData          map[string]map[string]int
    lastBurstResults  map[string]map[string]string
    burstReady        map[string]bool
    lastExecutionTime map[string]time.Time
    currentNodeSize  uint64
}

如您所见,有一个名为currentNodeSize的成员。此变量旨在在每次调用addNodeData函数时增加。您可以看到addNodeData函数调用了addCount函数,该函数随后使用了原子增量器。
func (p PipelineData) addNodeData(key string) {
    nodeSlot := clusterScenario.GetNodeSlotByHashSlot(key)
    i:=p.nodeData[nodeSlot][key]
    i++
    p.nodeData[nodeSlot][key]=i
    p.addCount()
    fmt.Println("Adding node count ",p.currentNodeSize)
}

func (p PipelineData) addCount(){
    atomic.AddUint64(&p.currentNodeSize, 1)
}

不幸的是,当我运行此命令时:
p.addNodeData("{pipelinetest}.key");
p.addNodeData("{pipelinetest}.key");
p.addNodeData("{pipelinetest}.key");
p.addNodeData("{pipelinetest}.key");
p.addNodeData("{pipelinetest}.key");
p.addNodeData("{pipelinetest}.key");
Dump(p.currentNodeSize)

输出为0

这是PipelineData结构的初始化:
p = &PipelineData{
  nodeData:make(map[string]map[string]int,0),
  lastBurstResults:make(map[string]map[string]string,0),
  burstReady:make(map[string]bool,0),
  lastExecutionTime:make(map[string]time.Time,0),
  currentNodeSize:0,
}
for i,_ := range clusterScenario.masterNodes{
    p.nodeData[i]=make(map[string]int,0)
}

我了解社区已要求我进行研究。我不知道该怎么办。任何帮助,将不胜感激。

我也尝试了使用变量的一般增量器,并且产生了相同的结果,这就是为什么我尝试使用原子增量器的原因

最佳答案

addCount使用值接收器而不是指针,因此它在结构的副本上进行操作,递增副本的字段,然后丢弃副本。改为更改它以获取指针:

func (p *PipelineData) addCount(){

这样可以解决您的问题。

10-06 06:04