package main
import (
"fmt"
"sync"
)
func printWord(word string, count int, currentChan, nextChan chan struct{}, wg *sync.WaitGroup) {
var i = 0
for i < count {
if _, ok := <-currentChan; ok {
fmt.Println(word)
i++
nextChan <- struct{}{}
}
}
wg.Done()
}
func main() {
var (
wg sync.WaitGroup
count = 100
dogChan = make(chan struct{}, 1)
catChan = make(chan struct{}, 1)
fishChan = make(chan struct{}, 1)
)
wg.Add(3)
go printWord("dog", count, dogChan, catChan, &wg)
go printWord("cat", count, catChan, fishChan, &wg)
go printWord("fish", count, fishChan, dogChan, &wg)
dogChan <- struct{}{}
wg.Wait()
}