Sieve of Eratosthenes
Sieve is an ancient and an ingenious way of calculating primes. It recursively eliminates all the multiples of a particular number up till a range and the left overs are essentially primes.

It was just a matter of defining the right data structure and computing the final set of primes
package sieve
import "sort"
// Sieve calculates prime
func Sieve(limit int) (out []int) {
out = make([]int, 0)
myMap := make(map[int]bool, 0)
if limit <= 1 {
return
}
// Populate all the numbers
for i := 2; i <= limit; i++ {
myMap[i] = true
}
// Check the numbers and false all the multiples
for i := 2; i <= limit; i++ {
for j := 2; (j * i) <= limit; j++ {
if myMap[(i * j)] {
myMap[(i * j)] = false
}
}
}
// Append only the positive found
for k := range myMap {
if myMap[k] {
out = append(out, k)
}
}
sort.Ints(out)
return
}I used a map of (int, boolean)to add all the element up to the limit (13 in my example above)
Initial Map has [2] = true [3] = true [4] = true. .... [13] = true
Then I ran a simple for loop to iterate till the limit 13 on the map and mark all the multiples as false.
So it starts with 2 till 13 checking for every multiple and marking it false.
2*2 = 4 [4] = false 2*3 = 6 [6] = false 2*4 = 8 [8] = false ...
and finally for all elements which have a true against it I add it to the int[] and return it.
