// 范围扫描 func (d *DB) Enumerate(iter *gorocksdb.Iterator, min, max []byte, direction IterDirection, fn func(i int, key, value []byte, quit *bool)) { found := false if direction == IterBackward { if len(max) == 0 { iter.SeekToLast() } else { iter.Seek(max) } } else { if len(min) == 0 { iter.SeekToFirst() } else { iter.Seek(min) } } found = iter.Valid() if !found { return } i := -1 // 范围判断 if found && between(iter.Key().Data(), min, max) { i++ quit := false fn(i, iter.Key().Data(), iter.Value().Data(), &quit) if quit { return } } for { found = false if direction == IterBackward { iter.Prev() } else { iter.Next() } found = iter.Valid() if found && between(iter.Key().Data(), min, max) { i++ quit := false fn(i, iter.Key().Data(), iter.Value().Data(), &quit) if quit { return } } else { break } } return }