Search⌘ K
AI Features

Solution: Goroutines

Explore how to use WaitGroup effectively to control goroutine execution in Go. This lesson helps you understand how to wait for background goroutines to finish before program termination, preventing common concurrency issues.

We'll cover the following...
...
Go (1.16.5)
package main
import (
"fmt"
"math"
"sync"
)
var (
mu sync.Mutex
)
func isPrime(num int) bool {
for i := 2; i <= int(math.Sqrt(float64(num))); i++ {
if int(num)%i == 0 {
return false
}
}
return true
}
func findPrimes(resultMap map[int]struct{}, startFrom, tryCount int, wg *sync.WaitGroup) {
for i := startFrom; i < startFrom+tryCount; i++ {
if isPrime(i) {
mu.Lock()
resultMap[i] = struct{}{}
mu.Unlock()
}
}
wg.Done()
}
func main() {
resultMap := make(map[int]struct{})
var wg sync.WaitGroup
for i := 0; i < 100; i++ {
wg.Add(1)
go findPrimes(resultMap, 99999*i+2, 1000, &wg)
}
wg.Wait()
fmt.Printf("Found %v primes\n", len(resultMap))
if len(resultMap) < 6746 {
panic("did not find all the prime numbers")
}
}
...