Goroutines Channels order of execution
You are calling the go routine in your code and you can't tell when the routine will end and the value will be passed to the buffered channel. As this code is asynchronous so whenever the routine will finish it will write the data to the channel and will be read on the other side. In the example above you are calling only two go routines so the behavior is certain and same output is generated somehow for most of the cases but when you will increase the go routines the output will not be same and the order will be different unless you make it synchronous.
Example
package main
import "fmt"
func sum(a []int, c chan int) {
sum := 0
for _, v := range a {
sum += v
}
c <- sum
}
func main() {
a := []int{17, 12, 18, 9, 24, 42, 64, 12, 68, 82, 57, 32, 9, 2, 12, 82, 52, 34, 92, 36}
c := make(chan int)
for i := 0; i < len(a); i = i + 5 {
go sum(a[i:i+5], c)
}
output := make([]int, 5)
for i := 0; i < 4; i++ {
output[i] = <-c
}
close(c)
fmt.Println(output)
}
[296 80 268 112 0]
Most Helpful This Week
How do you handle HTTP client server security in Go?
Illustration of Cigarette Smokers Problem in Golang
How do you handle HTTP client caching in Go?
How do you set cookies in an HTTP request with an HTTP client in Go?
Golang program for implementation of Tower of Hanoi Algorithm
Pass an Interface as an argument to a function in Go (Golang)