Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 扫描“;假;及;“真的”;就像雷迪戈的布尔人一样_Go_Redis_Redigo - Fatal编程技术网

Go 扫描“;假;及;“真的”;就像雷迪戈的布尔人一样

Go 扫描“;假;及;“真的”;就像雷迪戈的布尔人一样,go,redis,redigo,Go,Redis,Redigo,如何使用redis.scanstuct将字符串解析为布尔值甚至自定义类型 我正在使用的结构如下所示: type Attrs struct { Secret string `redis:"secret"` RequireSecret string `redis:"requireSecret"` UserID string `redis:"userId"` } requireCret属性是“true”或“false”字符串,我想将其扫描为b

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

我正在使用的结构如下所示:

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

requireCret属性是“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用于将Redis结果值转换为
bool
,因此无需实现扫描仪界面即可将
“true”
“false”
转换为
true
false

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


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

要扫描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用于将Redis结果值转换为
bool
,因此无需实现扫描仪界面即可将
“true”
“false”
转换为
true
false

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



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

显示您尝试扫描的类型以及生成您正在扫描结果的Redis命令。实现扫描仪接口可能不是解决您试图解决的问题的最佳解决方案。@CeriseLimón我用额外的信息来补充我的问题。生成您正在扫描的结果的Redis命令是什么?我不确定您的意思,我使用HGETALL查看它们可能我离这里很远:我想要Redis.ScanStruct(值和属性)要对某些属性使用自定义解析函数,请显示要扫描的类型以及生成要扫描结果的Redis命令。实现扫描仪接口可能不是解决您试图解决的问题的最佳解决方案。@CeriseLimón我用额外的信息来补充我的问题。生成您正在扫描的结果的Redis命令是什么?我不确定您的意思,我使用HGETALL查看它们可能我离这里很远:我想要Redis.ScanStruct(值和属性)对某些属性使用自定义解析函数听起来不错!但是,如果我想要更高级的东西,例如将RequiresCret解析为枚举(我计划将来支持比“true”和“false”更多的值),那么该怎么办呢?为RequiresCret字段使用一个类型,该类型使用您需要的逻辑实现scanner接口。我明白了,我不知道我应该在字段上实现该接口。我会试试:)。明天我有更多时间时,我会确保更新这个问题。嘿,Cerise,我在这里继续提问:听起来不错!但是,如果我想要更高级的东西,例如将RequiresCret解析为枚举(我计划将来支持比“true”和“false”更多的值),那么该怎么办呢?为RequiresCret字段使用一个类型,该类型使用您需要的逻辑实现scanner接口。我明白了,我不知道我应该在字段上实现该接口。我将尝试:)。我将确保明天有更多时间更新问题嘿,Cerise,我在这里继续提问: