Ich habe bemerkt, dass, wenn ich auf einer Scheibe versucht anhängt goroutines innerhalb einer for
Schleife, würde es Fälle geben, wo ich bekommen fehlt/leere Daten würden:Nicht thread-sicher anhängen?
destSlice := make([]myClass, 0)
var wg sync.WaitGroup
for _, myObject := range sourceSlice {
wg.Add(1)
go func(closureMyObject myClass) {
defer wg.Done()
var tmpObj myClass
tmpObj.AttributeName = closureMyObject.AttributeName
destSlice = append(destSlice, tmpObj)
}(myObject)
}
wg.Wait()
Manchmal, wenn ich drucken Sie alle AttributeName
s von destSlice
, einige Elemente sind leere Zeichenfolgen (""
), und andere Male sind einige Elemente aus sourceSlice
in destSlice
nicht vorhanden.
Hat mein Code ein Datenrennen, und bedeutet dies, dass append
nicht threadsicher für die gleichzeitige Verwendung durch mehrere Gloutines ist?