title: channels and memory leaks
body: <p>I'm trying to develop a program which runs continuously. </p>
  
  <p>It should pull some data from a database every <code>sleepPool</code> seconds  and 'process' the information in a non-blocking way(at least that's what I'm trying to do).</p>
  
  <p>The issue is that the memory keeps growing so I'm wondering if I'm doing something wrong.</p>
  
  <p>Below is a snippet from the my program.</p>
  
  <pre><code>var uCh = make(chan *user, buffLimit)     //emits new users to process
  var statsCh = make(chan *user, buffLimit) //emits new users to store
  
  func main() {
  
      go emitUser(db)
      go consumeUser(db)
  
      for ur := range statsCh {
        log.Infoln(ur)
      }
  }
  
  func emitUser(db *sql.DB) {
      for {
          time.Sleep(sleepPool * time.Second)
          log.Infoln("looking for new users")
          rows, err := rowsD.Query()
          for rows.Next() {
              uCh &lt;- usr
          }
      }
  }
  
  func consumeUser(db *sql.DB) {
      for usr := range uCh {
          go func(usr *user) {
              //do something with the user
              statsCh &lt;- usr
          }(usr)
      }
  }
  </code></pre>
  
  <p>I've read that I may need to close the channels so that the gc can recycle the memory but I'm not sure how to do that (because the program should run continuously) and if I really need to do it because the data is always read (guaranteed by the range from <code>main</code>) so I assume the memory is recycled.</p>