Mastering Concurrency in Go: With Fanout and Goroutines (Part 1)
Part 1 , Part 2 , Part 3 , Part 4 , Part 5 Goroutines can be used to take advantage of CPUs with multiple processors. Starting a Goroutine using the “go” keyword, will start execution on a thread in parallel if a thread is available. You will need to make sure that your main function does not exit before all the goroutines finish their work. Playground: https://go.dev/play/p/FTJLzwY34l2 package main import ( "fmt" "sync" ) func main() { wg := sync.WaitGroup{} // use many goroutines to compute the product of two numbers for i := 0; i < 100; i++ { for j := 0; j < 100; j++ { // capture the value of i and j // otherwise, the value of i and j will be changed // before the goroutine is executed i := i j := j // add a goroutine to the wait group wg.Add(1) go func() { // defer the decrement of the wait group defer wg.Done() // compute the product product := i * j // print the product fmt.Println(i, j, product) }() } } // ensure that goroutines are executed // otherwise, the program will exit // before all the goroutines are executed wg.Wait() fmt.Println("Done") }