为了账号安全,请及时绑定邮箱和手机立即绑定

增量器不起作用

增量器不起作用

Go
饮歌长啸 2021-04-04 17:15:50
我有一些应该增加计数的代码。这是包含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)}       我了解社区已要求我进行研究。我不知道该怎么办。任何帮助,将不胜感激。我还尝试了使用变量的通用增量器,并且产生了相同的结果,这就是为什么我尝试使用原子增量器的原因
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

addCount需要一个值接收器,而不是一个指针,因此它对结构的副本进行操作,增加副本的字段,然后丢弃副本。改为更改它以获取指针:

func (p *PipelineData) addCount(){

这样可以解决您的问题。


查看完整回答
反对 回复 2021-04-19
  • 1 回答
  • 0 关注
  • 261 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信