Golang 1.8 中并发映射迭代和映射写入错误

use*_*315 5 go

所以我有这个功能..

func Set(firstSet map[string][]App, store map[string]*Parsed) map[string][string]struct{} {
    s := make(map[string]map[string]struct{})
    for dmn, parsed := range store {
        for cId, apps := range firstSet {
            if _, ok := s[dmn]; !ok {
                s[dmn] = make(map[string]struct{})
            }
            s[dmn][cId] = struct{}{}
        }
    }

    return s
}
Run Code Online (Sandbox Code Playgroud)

该函数的第 3 行(对于 dmn,parsed := range store)给了我 Golang 1.8 中的错误并发映射迭代和映射写入错误。任何想法?

Bog*_*olt 5

看起来像是并发地图滥用。可能你的函数是从不同的 gorotine 调用的。尝试将函数体包含在 mutex.Lock()/Unlock() 中,以便您的映射可以安全地并发使用。