C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
A method can be called as a goroutine with the go-keyword. This creates many possibilities.
With channels, we can return values from our asynchronous goroutines. We specify channels with the chan-keyword. We make channels with make.
Channel example. Let us combine these concepts into a simple program that makes sense. This program creates a channel named "c." The channel returns an int.
Func: In this example we create a func and invoke it. We use the go-keyword to call it as a goroutine.
Computation: The func uses three nested for-loops to waste some time. It does nothing important.
Chan: The func returns the value of the variable res on the channel. This can be any int value.
Then: A PrintLn statements is executed—before the computation finishes. The channel result is waited for, and then printed.
Based on: Golang 1.4 Golang program that uses chan, makes channel package main import "fmt" func main() { // Make a channel that returns an int. c := make(chan int) // Call this func. go func() { // This does a long-running numerical computation. // ... It increments a number, then decrements it. res := 0 for i := 0; i < 100; i++ { for x := 0; x < 10000; x++ { for z := 0; z < 10000; z++ { res++ } for z := 0; z < 10000; z++ { res-- } } } // Return the counter on the channel. c <- res }() fmt.Println("HERE") // Wait for result of func, store value in local. res := <-c fmt.Println("DONE") fmt.Println("RESULT =", res) } Output HERE DONE RESULT = 0
With asynchronous programs, we can better wield the power of modern computers. We can compute results faster. But some complexity is introduced.
In its modern design, Go has a good solution to asynchronous problems. With chan and goroutines (that use the go keyword) we run code on several threads at once.