Shuffling an array of cards
I would recommend something closer to a Knuth shuffle, where you swap items in place in the array, rather then allocating a new one.

This is untested and is based on the Fisher-Yates shuffle:

func (deck *Deck) Shuffle() {
    rand.Seed(time.Now().UnixNano())

    for i := len(deck.Cards)-1; i &gt; 0; i-- {
        j := rand.Intn(i+1) // i+1 rather than i; the upper bound is not inclusive
        deck.Cards[i], deck.Cards[j] = deck.Cards[j], deck.Cards[i]
    }
}


Unrelated to shuffling, you should also check out bucketed flashcards.  Consider the Leitner system.