zoukankan      html  css  js  c++  java
  • storage.go

    package storage

    import (
        "fmt"
        "os"
    )

    const DEFAULT_STORAGE_ENGINE = "bolt"  //默认存储引擎 为 bolt
    //存储引擎map集合  
    var supportedStorage = map[string]func(path string) (Storage, error){
        "kv":   openKVStorage,
        "bolt": openBoltStorage,
    }
    //存储引擎注册
    func RegisterStorageEngine(name string, fn func(path string) (Storage, error)) {
        supportedStorage[name] = fn
    }
    //存储引擎接口
    type Storage interface {
        Set(k, v []byte) error
        Get(k []byte) ([]byte, error)
        Delete(k []byte) error
        ForEach(fn func(k, v []byte) error) error
        Close() error
        WALName() string
    }
    //打开存储引擎  存储引擎 优先使用用户自定的引擎  ,默认引擎为bolt  。如果不存在 使用默认引擎
    func OpenStorage(path string) (Storage, error) {
        wse := os.Getenv("WUKONG_STORAGE_ENGINE") //默认从环境变量中  加载存储引擎
        if wse == "" {
            wse = DEFAULT_STORAGE_ENGINE
        }
    //从引擎map中获取 引擎对象
        if fn, has := supportedStorage[wse]; has {
            return fn(path)
        }
        return nil, fmt.Errorf("unsupported storage engine %v", wse)
    }

  • 相关阅读:
    [蓝桥] 基础练习 数列排序(java)
    关不掉之以假乱真
    关不掉.vbs
    1.3内置数据类型
    1.2成员变量+类变量+static关键字
    1.1变量+命名规则
    Java 大数任意进制转换
    打印十字图
    c语言求最大公约数和最小公倍数
    核桃的数量
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7461664.html
Copyright © 2011-2022 走看看