在 Redigo 中将 "false" 和 "true" 扫描为布尔值

Scanning "false" and "true" as booleans in Redigo

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

我使用的结构如下所示:

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

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

要扫描 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" 转换为 truefalse.

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

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