code: func (pq *PriorityQueue) Push(x interface{}, p int) error {
  	if p < 0 || p >= len(pq.Queues) {
  		return errBadPriority
  	}
  	val := struct {
  		v interface{}
  		t time.Time
  	}{
  		x,
  		time.Now(),
  	}
  	select {
  	case pq.Queues[p] <- val:
  	default:
  		return ErrContention
  	}
  	select {
  	case pq.wakeup <- wakey:
  	default:
  	}
  	return nil
  }
docs: // Push pushes an item to the appropriate queue specified in the priority argument
  // if context is given it waits until either the item is pushed or the Context aborts