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.
