Solution: Goroutines
Let's look at the solution.
We'll cover the following...
Solution
Press + to interact
package mainimport ("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.WaitGroupfor 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")}}
Explanation
Goroutines running in the background don’t stop the program from terminating. In ...