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)
    }