title: Go: one channel with multiple listeners
body: <p>I'm pretty new to Go so sorry if the topic is wrong but I hope you understand my question. I want to process events to different go routines via a channel. Here is some sample code</p>
  
  <pre><code>type Event struct {
      Host string
      Command string
      Output string
  }
  
  
  var (
      incoming        = make(chan Event)
  )
  
  func processEmail(ticker* time.Ticker) {
      for {
          select {
          case t := &lt;-ticker.C:
              fmt.Println("Email Tick at", t)
          case e := &lt;-incoming:
              fmt.Println("EMAIL GOT AN EVENT!")
              fmt.Println(e)
          }
      }
  }
  
  func processPagerDuty(ticker* time.Ticker) {
      for {
          select {
          case t := &lt;-ticker.C:
              fmt.Println("Pagerduty Tick at", t)
          case e := &lt;-incoming:
              fmt.Println("PAGERDUTY GOT AN EVENT!")
              fmt.Println(e)
          }
      }
  }
  
  func main() {
  
      err := gcfg.ReadFileInto(&amp;cfg, "dispatch-api.cfg")
      if err != nil {
          fmt.Printf("Error loading the config")
      }
  
      ticker := time.NewTicker(time.Second * 10)
      go processEmail(ticker)
  
      ticker := time.NewTicker(time.Second * 1)
      go processPagerDuty(ticker)
  }
  
  
  func eventAdd(r render.Render, params martini.Params, req *http.Request) {
  
      // create an event now
      e := Event{Host: "web01-east.domain.com", Command: "foo", Output: "bar"}
      incoming &lt;- e
  }
  </code></pre>
  
  <p>So the ticker events work just create. When I issue an API call to create an event I just get output from the processEmail function. Its whatever go routine is called first will get the event over the channel. </p>
  
  <p>Is there a way for both functions to get that event?</p>