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
Polymorphism in Go Programming Language
How do you handle HTTP authentication with an HTTP client in Go?
Golang program for implementation of Merge Sort
Create and Print Multi Dimensional Slice in Golang
How do you handle HTTP redirects in Go?
Program in Go language to Program to Add Two Matrix Using Multi-dimensional Arrays
Assign Default Value for Struct Field
How to read names of all files and folders in current directory?
Declaration of a struct type
Golang program for implementation LZW Data Compression and Uncompression