在 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"
转换为 true
和 false
.
您可以在结构字段的子集上实现扫描器接口。 Redigo 将对未实现接口的字段使用默认解析器,对实现接口的字段使用应用程序的自定义解析器。
除非您需要通过 Redis API 访问单个哈希元素,否则通常最好通过使用 JSON、gob 或其他编码器序列化结构来将结构存储为 Redis 字符串。
如何使用 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"
转换为 true
和 false
.
您可以在结构字段的子集上实现扫描器接口。 Redigo 将对未实现接口的字段使用默认解析器,对实现接口的字段使用应用程序的自定义解析器。
除非您需要通过 Redis API 访问单个哈希元素,否则通常最好通过使用 JSON、gob 或其他编码器序列化结构来将结构存储为 Redis 字符串。