// Get returns the data associated with the key from the database. Remember // to deallocate the returned Slice. func (db *DB) Get(opts *ReadOptions, key []byte) (*Slice, error) { var ( cErr *C.char cValLen C.size_t cKey = byteToChar(key) ) cValue := C.rdb_get(db.c, opts.c, cKey, C.size_t(len(key)), &cValLen, &cErr) if cErr != nil { defer C.free(unsafe.Pointer(cErr)) return nil, errors.New(C.GoString(cErr)) } return NewSlice(cValue, cValLen), nil }
// GetBytes is like Get but returns a copy of the data. func (db *DB) GetBytes(opts *ReadOptions, key []byte) ([]byte, error) { var ( cErr *C.char cValLen C.size_t cKey = byteToChar(key) ) cValue := C.rdb_get(db.c, opts.c, cKey, C.size_t(len(key)), &cValLen, &cErr) if cErr != nil { defer C.free(unsafe.Pointer(cErr)) return nil, errors.New(C.GoString(cErr)) } if cValue == nil { return nil, nil } defer C.free(unsafe.Pointer(cValue)) return C.GoBytes(unsafe.Pointer(cValue), C.int(cValLen)), nil }