package main
import (
"fmt"
"sync"
)
func sum(slice []int, ch chan int, wg *sync.WaitGroup) {
defer wg.Done()
sum := 0
for _, v := range slice {
sum += v
}
ch <- sum
}
func main() {
nums := make([]int, 1000000)
for i := 0; i < len(nums); i++ {
nums[i] = i
}
chunkSize := len(nums) / 4
ch := make(chan int, 4)
var wg sync.WaitGroup
for i := 0; i < 4; i++ {
wg.Add(1)
go sum(nums[i*chunkSize:(i+1)*chunkSize], ch, &wg)
}
go func() {
wg.Wait()
close(ch)
}()
totalSum := 0
for partialSum := range ch {
totalSum += partialSum
}
fmt.Printf("Total sum: %d\n", totalSum)
}