package storage import ( "fmt" ) type DB interface { Get(string, ...string) ([]byte, error) Set(string, []byte, ...string) error Close() error } var DefaultNamespace = "namespace" func New(key Type, params ...string) (db DB, err error) { defer func() { if i := recover(); i != nil { err = fmt.Errorf("panic making %s: %v", key, i) } }() err = ErrNotImpl switch key { case MAP: db = NewMap() err = nil case BOLT: db, err = NewBolt(params[0]) case MINIO: db, err = NewMinio(params[0], params[1], params[2]) case CACHE: db, err = NewCache(params...) case LEVELDB: db, err = NewLevelDB(params[0]) case MEMCACHE: db, err = NewMemcache(params[0], params[1:]...) case MEMCACHECLUSTER: db, err = NewMemcacheCluster(params[0], params[1:]...) case MONGO: db, err = NewMongo(params[0], params[1:]...) } return } func resolveNamespace(ns []string) string { namespace := DefaultNamespace if len(ns) > 0 { namespace = ns[0] } return namespace }