Skip to content

Instantly share code, notes, and snippets.

@deckarep
Last active December 21, 2016 04:03
Show Gist options
  • Save deckarep/1aa44ec2b5e2dd861f3fabc0e7634e24 to your computer and use it in GitHub Desktop.
Save deckarep/1aa44ec2b5e2dd861f3fabc0e7634e24 to your computer and use it in GitHub Desktop.
Don't communicate by sharing memory; instead, blah blah blah...
package main
import (
"fmt"
)
var doublerChannel = make(chan *item, 0)
var adderChannel = make(chan *item, 0)
var completeChannel = make(chan *item, 0)
type item struct {
number int
}
func main() {
// Start our adder factory
go adder(16)
// Start our doubler factory
go doubler()
// Introduce our dataset
items := []*item{
&item{number: 0},
&item{number: 3},
&item{number: 77},
}
// Kick off the producer
go producer(items)
// Finally read and display our items as they are completed
for i := 0; i < len(items); i++ {
item := <-completeChannel
fmt.Printf("Item %d has a value of %d\n", i, item.number)
}
}
func producer(data []*item) {
for _, i := range data {
adderChannel <- i
}
close(adderChannel)
}
func adder(amount int) {
for item := range adderChannel {
item.number += amount
doublerChannel <- item
}
}
func doubler() {
for item := range doublerChannel {
item.number = item.number * 2
completeChannel <- item
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment