Sobes.tech
Junior — Middle

É permitido passar segmentos de fatia (slice) para goroutines separadas para processamento paralelo?

sobes.tech IA

Resposta da IA

Sim, a transferência de segmentos de fatia (slice) para goroutines separadas para processamento paralelo é permitida e frequentemente usada para paralelizar tarefas. No entanto, é importante lembrar que as fatias em Go são tipos de referência, ou seja, várias goroutines podem referir-se ao mesmo array subjacente. Para evitar condições de corrida, deve-se garantir que cada goroutine trabalhe com um segmento único da fatia e não modifique os dados utilizados por outras goroutines, ou usar sincronização (por exemplo, mutex) ao acesso compartilhado.

Exemplo de transferência segura de segmentos de fatia para goroutines:

func processSegment(segment []int, wg *sync.WaitGroup) {
    defer wg.Done()
    // Processar segmento
}

func main() {
    data := []int{1, 2, 3, 4, 5, 6, 7, 8}
    var wg sync.WaitGroup
    segmentSize := 2

    for i := 0; i < len(data); i += segmentSize {
        end := i + segmentSize
        if end > len(data) {
            end = len(data)
        }
        wg.Add(1)
        go processSegment(data[i:end], &wg)
    }
    wg.Wait()
}

Neste exemplo, cada goroutine recebe um segmento separado da fatia, o que é seguro para processamento paralelo.