Goroutineを使って下記プログラムを作成しました。(Playgroundで実行できませんがローカルではできます)
https://play.golang.org/p/5IdzS4FAtp

しかし、これはでスタックしてしまいます。
このようなプログラムをスタックせずに実行するにはどうすればいいのでしょうか。

プログラム

package main

import "fmt"
import "runtime"

func main() {
    runtime.GOMAXPROCS(runtime.NumCPU())
    msgCh := make(chan string)
    count := 0.0
    for i := 0; i < 255; i++ {
        go first(msgCh)
    }

L:
    for {
        select {
        case msg := <-msgCh:
            count++
            fmt.Printf("%f:%s\n", count, msg)
            if count == 4294967296 {
                break L
            }
        default:
        }
    }

}

func first(msgCh chan string) {
    for i := 0; i < 255; i++ {
        go second(msgCh)
    }
}

func second(msgCh chan string) {
    for i := 0; i < 255; i++ {
        go third(msgCh)
    }
}

func third(msgCh chan string) {
    for i := 0; i < 255; i++ {
        msgCh <- "Hello"
    }
}