package leveldb import ( "errors" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/opt" ) var _db *leveldb.DB var config *Config func Init(conf *Config) { config = conf if config == nil { config = &Config{ Path: "./", } } } func New() (*leveldb.DB, error) { if _db != nil { return _db, nil } db, err := leveldb.OpenFile(config.Path, nil) if err != nil { return nil, err } _db = db return _db, nil } func Close() { if _db != nil { _db.Close() } _db = nil } func Get(key *string) (*[]byte, error) { db, err := New() if err != nil { return nil, err } if db == nil { return nil, errors.New("leveldb is nil") } ret, err := db.Has([]byte(*key), &opt.ReadOptions{ DontFillCache: false, Strict: 0, }) if err != nil { return nil, errors.New("key检查异常") } if !ret { return nil, errors.New("key不存在") } val, err := db.Get([]byte(*key), nil) if err != nil { return nil, err } if len(val) == 0 { return nil, errors.New("key empty") } return &val, nil } func Put(key *string, payload *[]byte) error { db, err := New() if err != nil { return err } if db == nil { return errors.New("leveldb is busy now") } if err := db.Put([]byte(*key), *payload, nil); err != nil { return err } return nil } func Delete(key *string) error { db, err := New() if err != nil { return err } if db == nil { return errors.New("leveldb is busy now") } ret, err := db.Has([]byte(*key), &opt.ReadOptions{ DontFillCache: false, Strict: 0, }) if err != nil { return err } if !ret { return nil } if err := db.Delete([]byte(*key), nil); err != nil { return err } return nil }