code: func (db *DB) LRange(key []byte, start int32, stop int32) ([][]byte, error) {
  	if err := checkKeySize(key); err != nil {
  		return nil, err
  	}
  
  	var headSeq int32
  	var llen int32
  	var err error
  
  	metaKey := db.lEncodeMetaKey(key)
  
  	it := db.bucket.NewIterator()
  	defer it.Close()
  
  	if headSeq, _, llen, err = db.lGetMeta(it, metaKey); err != nil {
  		return nil, err
  	}
  
  	if start < 0 {
  		start = llen + start
  	}
  	if stop < 0 {
  		stop = llen + stop
  	}
  	if start < 0 {
  		start = 0
  	}
  
  	if start > stop || start >= llen {
  		return [][]byte{}, nil
  	}
  
  	if stop >= llen {
  		stop = llen - 1
  	}
  
  	limit := (stop - start) + 1
  	headSeq += start
  
  	v := make([][]byte, 0, limit)
  
  	startKey := db.lEncodeListKey(key, headSeq)
  	rit := store.NewRangeLimitIterator(it,
  		&store.Range{
  			Min:  startKey,
  			Max:  nil,
  			Type: store.RangeClose},
  		&store.Limit{
  			Offset: 0,
  			Count:  int(limit)})
  
  	for ; rit.Valid(); rit.Next() {
  		v = append(v, rit.Value())
  	}
  
  	return v, nil
  }
docs: // LRange gets the value of list at range.