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
Go program to find MX records record of a domain
Example of Sscan vs Sscanf vs Sscanln from FMT Package
Defining a type that satisfies an interface in Go Programming Language
Is There Still a Need for Programming in This AI World?
GO Program to Find the Largest Number Among Three Numbers
Converting Int data type to Float in Go
What is Slice Data Type in Go?
GO language program with example of Array Reverse Sort Functions for integer and strings
How to access slice items in Golang?
React JS Count number of checkboxes are checked