Параллельное чтение и запись 2 карт в диапазоне L oop - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь читать и писать две отдельные карты в одном диапазоне l oop. Проблема в том, что вывод не согласован между вызовами. Я пытаюсь создать REST API, используя go chi.

var mapMutex = sync.RWMutex{}

// Root map
var rootLocationMap = make(map[int]*LocationViewDto)

// Child map
var childLocationMap = make(map[int]*LocationViewDto)

// Insert map here

for _, location := range childLocationMap {
        mapMutex.RLock()
        temp, isExist := rootLocationMap[*location.ParentId]
        mapMutex.RUnlock()

        if isExist {
            temp.Children = append(temp.Children, *location)

            mapMutex.Lock()
            rootLocationMap[*location.ParentId] = temp
            mapMutex.Unlock()

        } else {
            mapMutex.RLock()
            temp, isExist = childLocationMap[*location.ParentId]
            mapMutex.RUnlock()

            temp.Children = append(temp.Children, *location)

            mapMutex.Lock()
            childLocationMap[*location.ParentId] = temp
            mapMutex.Unlock()
        }
    }
...