在Redigo中扫描“假”和“真”作为布​​尔值

时间:2017-10-23 17:49:21

标签: go redis redigo

如何使用redis.ScanStruct将字符串解析为布尔值,甚至是自定义类型?

我使用的结构如下所示:

type Attrs struct {
    Secret         string `redis:"secret"`
    RequireSecret  string `redis:"requireSecret"`
    UserID         string `redis:"userId"`
}

RequireSecret属性是“true”或“false”字符串,我想将其扫描为bool

1 个答案:

答案 0 :(得分:2)

要扫描HGETALL的结果,请使用以下类型

type Attrs struct {
    Secret         string `redis:"secret"`
    RequireSecret  bool `redis:"requireSecret"`
    UserID         string `redis:"userId"`
}

使用以下命令:

values, err := redis.Values(c.Do("HGETALL", key))
if err != nil {
   // handle error
}
var attrs Attrs
err = redis.ScanStruct(values, &attrs)
if err != nil {
   // handle error
}

由于Redigo使用strconv.ParseBool将Redis结果值转换为bool,因此您无需实施扫描仪界面即可将"true""false"转换为{{1} }和true

您可以在结构字段的子集上实现扫描仪接口。 Redigo将对未实现接口的字段使用默认解析,并为实现接口的字段使用应用程序的自定义解析器。

除非您需要通过Redis API访问单个哈希元素,否则通常可以通过使用JSON,gob或其他编码器序列化结构来将sruct存储为Redis字符串。