code: func (q *OffsetQueue) Get(offset uint64) ([]interface{}, uint64) {
  	oldOffset := offset
  	if offset > 0 {
  		offset = offset - 1
  	}
  
  	q.Lock()
  	max := q.getMaxOffset0()
  	if offset > max {
  		panic(fmt.Sprintf("bug: error offset %d, end is %d", offset, q.end))
  	} else if offset < q.start || (oldOffset == 0 && offset == q.start && q.start == 0) {
  		value := q.items[0:]
  		q.Unlock()
  		return value, max
  	}
  
  	var value []interface{}
  	for i := q.start; i < q.end; i++ {
  		if i <= offset {
  			q.items[i-q.start] = nil
  		} else {
  			value = append(value, q.items[i-q.start])
  		}
  	}
  
  	old := q.start
  	q.start = offset + 1
  	if q.start < q.end {
  		q.items = q.items[q.start-old:]
  	} else {
  		q.items = make([]interface{}, 0, 0)
  	}
  	q.Unlock()
  
  	return value, max
  }
docs: // Get returns all the items after the offset, and remove all items before this offset