Arrays 尝试仅向数组中添加唯一元素
我正在努力跟踪数组中的所有“工作人员”Arrays 尝试仅向数组中添加唯一元素,arrays,pointers,go,concurrency,mutex,Arrays,Pointers,Go,Concurrency,Mutex,我正在努力跟踪数组中的所有“工作人员”m是一个具有字符串字段uuid的结构,args。我不确定这里出了什么问题,但代码一次又一次地添加具有相同uuid的工作线程(在调用代码时) 任何帮助都将不胜感激 注意:这段代码可能会被并发调用(但代码是互斥锁的,所以这并不重要) 正如@mkropriva指出的,新Wrkr的uuid从未被分配 if pollingWrkr == nil { pollingWrkr = new(Wrkr) pollingWrkr.uuid = a
m
是一个具有字符串字段uuid的结构,args
。我不确定这里出了什么问题,但代码一次又一次地添加具有相同uuid的工作线程(在调用代码时)
任何帮助都将不胜感激
注意:这段代码可能会被并发调用(但代码是互斥锁的,所以这并不重要)
正如@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)
}
所提供的代码从未将uuid分配给工作者,因此他们中没有一个有uuid,或者他们有uuid吗?请注意,因为您在片中存储非指针,所以需要在第二个循环中分配uuid,在追加之前分配到
pollingWrkr.uuid
,或者在追加之后分配到m.workers[len(m.workers)-1]。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)
}