arrays - 尝试仅向数组添加唯一元素
问题描述
我正在尝试跟踪数组中的所有“工人”。m
是一个具有字符串字段 uuid 的结构,args
. 我不确定这里出了什么问题,但是代码一次又一次地添加具有相同 uuid 的工人(当调用代码时)。
任何帮助,将不胜感激。
PS:这段代码可能会被同时调用(但代码是互斥锁的,所以没关系)
var pollingWrkr *Wrkr
pollingWrkr = nil
for idx, w := range m.workers {
if w.uuid == args.WorkerUUID {
pollingWrkr = &m.workers[idx]
break
}
}
// add new worker
if pollingWrkr == nil {
pollingWrkr = new(Wrkr)
m.workers = append(m.workers, *pollingWrkr) // add worker to list
log.Printf("worker %v added\n", args.WorkerUUID)
}
解决方案
正如@mkropriva 指出的那样,从未分配过新的Wrkr 的uuid。
if pollingWrkr == nil {
pollingWrkr = new(Wrkr)
pollingWrkr.uuid = args.WorkerUUID // THIS HERE SOLVED IT!!!
m.workers = append(m.workers, *pollingWrkr) // add worker to list
log.Printf("worker %v added\n", args.WorkerUUID)
}
推荐阅读
- python - 如何使用 Python 以更有效的方式解析这些 json 数据?
- javascript - 如何将 hookWindowMessage WM_COPYDATA 回调参数转换为 Electron/NodeJS 中的 JavaScript?
- java - 使用 Jax-RS 和 CDI 计划任务
- r - umap 突出显示两种不同的模型
- java - 方法注入是如何实现的?
- laravel - 未定义的属性:stdClass::$categories
- python - 具有所有自变量作为分类的随机森林回归器
- javascript - 在 React js 中无法使用 beforeunload 函数
- bash - 如果条件不是,则无法以红色打印
- microsoft-teams - 在 Microsoft Teams 中为每个成员创建数字日记