Junior — Middle
Is it permissible to pass slice segments to separate goroutines for parallel processing?
sobes.tech AI
Answer from AI
Yes, passing slice segments to separate goroutines for parallel processing is permissible and often used to parallelize tasks. However, it is important to remember that slices in Go are reference types, meaning multiple goroutines can refer to the same underlying array. To avoid data races, ensure that each goroutine works with a unique segment of the slice and does not modify data used by other goroutines, or use synchronization (e.g., mutex) when accessing shared data.
Example of safe slice segment passing to goroutines:
func processSegment(segment []int, wg *sync.WaitGroup) {
defer wg.Done()
// Process segment
}
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()
}
In this example, each goroutine receives a separate slice segment, which is safe for parallel processing.