Here is an example producer-consumer type. I only use the WaitGroup here so that the main goroutine wouldn't exit instantly. Theoretically your application could either wait, or do some other interesting stuff in the mean time.
Note that you could also use a buffered channel using c := make(chan(*Feed, n)) where n is the number you want buffered. Just be aware that in a typical producer-consumer scenario, there is sometimes a lot of resources allocated per job. So depending on that you could buffer just a few, or all of them if you wanted.
Without a buffered channel, it acts as a sync between the goroutines. Producers block at c <- waiting for a consumer's <- c to hand off to, so only one of each routine execute these lines at a time.
EDIT I added a pause before printing "started" to make the output less synchronized. It previously always output:
created started created started ...
https://play.golang.org/p/FmWqegr-CR
package main import ( "fmt" "math/rand" "sync" "time" ) type Feed struct { title, descr, link string published time.Time } func CreateFeed() *Feed { r := rand.Int() % 500 time.Sleep(1000 + time.Duration(r)*time.Millisecond) fmt.Println("Feed created") return &Feed{ published: time.Now(), } } func UseFeed(f *Feed) { time.Sleep(100 * time.Millisecond) fmt.Println("Feed started") time.Sleep(1600 * time.Millisecond) fmt.Printf("Feed consumed: %s\n", f.published) } func main() { numFeeds := 10 var wg sync.WaitGroup wg.Add(10) c := make(chan (*Feed)) for i := 0; i < numFeeds; i++ { go func() { c <- CreateFeed() }() } for i := 0; i < numFeeds; i++ { go func() { f := <-c UseFeed(f) wg.Done() }() } wg.Wait() }
I'm hoping this is what you are looking for.
sync.WaitGroupwithout needing any channels. Channels are often used in provider-consumer type applications where you have one or more routines creating tasks, and one or more routines executing the tasks. So my question for clarification is this: does your code creating theFeeds take enough time for it to make sense to goroutines for both creation and consumption of theFeeds? Does the "do some stuff with Feed" actually take any time?ar, it's a problem, but i guess same code withoutaris possible