¿Puedo escribir simultáneamente diferentes elementos de corte

Tengo un segmento que contiene trabajo por hacer, y un segmento que contendrá los resultados cuando todo esté listo. El siguiente es un bosquejo de mi proceso general:

var results = make([]Result, len(jobs))
wg := sync.WaitGroup{}
for i, job := range jobs {
    wg.Add(1)
    go func(i int, j job) {
        defer wg.Done()
        var r Result = doWork(j)
        results[i] = r
    }(i, job)
}
wg.Wait()
// Use results

Parece funcionar, pero no lo he probado a fondo y no estoy seguro de si es seguro hacerlo. En general, no me sentiría bien si dejara que múltiples goroutines escribierancualquier cosa, pero en este caso, cada gorutina está limitada a su propio índice en el segmento, que está preasignado.

Supongo que la alternativa es recopilar resultados a través de un canal, pero como el orden de los resultados es importante, esto parecía bastante simple. ¿Es seguro escribir en elementos de corte de esta manera?

Respuestas a la pregunta(2)

Su respuesta a la pregunta