seefan / gossdb

ssdb client for go with pool surport
MIT License
131 stars 47 forks source link

Setbit/Getbit/Bitcount 看到已被注释 #54

Closed zut closed 4 years ago

zut commented 4 years ago

能否告知是 测试中发现什么问题吗?

seefan commented 4 years ago

因为这块没有完成测试,所以暂时关掉了

zut commented 4 years ago

@seefan 好的, 位值算是这种数据库的特色了. 重要功能

zut commented 4 years ago

因为这块没有完成测试,所以暂时关掉了

我已测试,发现是ok的. Setbit/Getbit/Bitcount 都正常

seefan commented 4 years ago

好的,多谢,那我在下个版本开放这块

zut commented 4 years ago

@seefan 基于你的来封装了一个给自己用, 由于太多个性化的东西, 所以我就不pull了, 请看我改了一点的代码

/设置字符串内指定位置的位值(BIT), 字符串的长度会自动扩展.
//
//  key 键值
//  offset 位偏移
//  bit  0 或 1
//  返回 val,原来的位值
//  返回 err,可能的错误,操作成功返回 nil
func (s *Client) Setbit(key string, offset int64, bit int) (int64, error) {

    resp, err := s.Do("setbit", key, offset, bit)

    if err != nil {
        return 255, goerr.Errorf(err, "Setbit %s error", key)
    }
    if len(resp) == 2 && resp[0] == oK {
        return Value(resp[1]).Int64(), nil
    }
    return 0, makeError(resp, key)
}

//获取字符串内指定位置的位值(BIT).
//
//  key 键值
//  offset 位偏移
//  返回 val,位值
//  返回 err,可能的错误,操作成功返回 nil
func (s *Client) Getbit(key string, offset int64) (int64, error) {

    resp, err := s.Do("getbit", key, offset)

    if err != nil {
        return 255, goerr.Errorf(err, "Getbit %s error", key)
    }
    if len(resp) == 2 && resp[0] == oK {
        return Value(resp[1]).Int64(), nil
    }
    return 0, makeError(resp, key)
}
func (s *Client) BitCount(key string, start int64, end int64, ) (int64, error) {
    resp, err := s.Do("bitcount", key, start, end)
    if err != nil {
        return 255, goerr.Errorf(err, "BitCount %s error", key)
    }
    if len(resp) == 2 && resp[0] == oK {
        //fmt.Println(Value(resp[1]).String())
        return Value(resp[1]).Int64(), nil
    }
    return 0, makeError(resp, key)
}