code: func (q *Type) Get() (item interface{}, shutdown bool) {
  	q.cond.L.Lock()
  	defer q.cond.L.Unlock()
  	for len(q.queue) == 0 && !q.shuttingDown {
  		q.cond.Wait()
  	}
  	if len(q.queue) == 0 {
  		// We must be shutting down.
  		return nil, true
  	}
  	item, q.queue = q.queue[0], q.queue[1:]
  	q.processing.insert(item)
  	q.dirty.delete(item)
  	return item, false
  }
docs: // Get blocks until it can return an item to be processed. If shutdown = true,
  // the caller should end their goroutine. You must call Done with item when you
  // have finished processing it.