code: func (m *Market) AddDemand(r Requirement, bid float64, retChan chan Supply) {
  	m.Lock.Lock()
  	defer m.Lock.Unlock()
  
  	if len(m.Supplies) > 0 {
  		supply, matched := m.pickBestSupplyFor(r)
  		if matched {
  			retChan <- supply
  			close(retChan)
  			return
  		}
  	}
  	m.Demands = append(m.Demands, Demand{
  		Requirement: r,
  		Bid:         bid,
  		ReturnChan:  retChan,
  	})
  	m.hasDemands.Signal()
  }
docs: // retChan should be a buffered channel