Executing periodic tasks
A vs. B type questions are seldom good questions for a code review. Often the answer is "C".

That's true this time too.


You don't need a go routine for the "ticker".
Your second implementation only waits for 1 second, instead of 2.
your "quit" channels don't need to be buffered


Why don't you just do:

func main() {
    for t := range time.NewTicker(2 * time.Second).C {
        periodicFunction(t)
    }
}