如何使用redis.ScanStruct
将字符串解析为布尔值,甚至是自定义类型?
我使用的结构如下所示:
type Attrs struct {
Secret string `redis:"secret"`
RequireSecret string `redis:"requireSecret"`
UserID string `redis:"userId"`
}
RequireSecret属性是“true”或“false”字符串,我想将其扫描为bool
。
答案 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字符串。