我有一个看起来像这样的结构:
type authEnum int
const (
never authEnum = iota
sometimes
always
)
type Attrs struct {
Secret string `redis:"secret"`
RequireSecret authEnum `redis:"requireSecret"`
UserID string `redis:"userId"`
}
func (e *authEnum) RedisScan(src interface{}) error {
// This never gets called!
if e == nil {
return fmt.Errorf("nil pointer")
}
switch src := src.(type) {
case string:
if src == "false" || src == "never" {
*e = never
} else if src == "sometimes" {
*e = sometimes
} else { // "always" or "true"
*e = always
}
default:
return fmt.Errorf("cannot convert authEnum from %T to %T", src, e)
}
return nil
}
func getAttributes(ctx *AppContext, hash string) (*Attrs, error) {
rc := ctx.RedisPool.Get()
values, err := redis.Values(rc.Do("HGETALL", "redishash"))
rc.Close()
if err != nil {
return nil, err
}
attrs := Attrs{}
redis.ScanStruct(values, &attrs)
return &attrs, nil
}
如何实现扫描仪的接口RequireSecret
属性来解析authEnum
类型超出"never"
,"sometimes"
或"always"
Redis的哈希值?
如何计算值并将其分配给authEnum?在我的代码示例中,RedisScan
永远不会调用。
在指针接收器上实现该方法。Redis批量字符串表示为[] byte,而不是字符串:
func (e *authEnum) RedisScan(src interface{}) error {
b, ok := src.([]byte)
if !ok {
return fmt.Errorf("cannot convert authEnum from %T to %T", src, b)
}
switch string(b) {
case "false", "never":
*e = never
case "sometimes":
*e = sometimes
default:
*e = always
}
return nil
}
始终检查并处理错误。从返回的错误ScanStruct
报告类型问题。
无需检查指向struct成员的nil指针。如果ScanStruct的参数为nil,则Redigo将在调用RedisScan方法之前恐慌。
域内有一个接口“DetectPriorityInterface”。两个实现必须同时处于活动状态;一种“混合”必须实时地选择一种而不是另一种。 问题是:这些实现(两个实现)应该住在哪里:在域层还是基础结构层?? 内部实现充满了业务规则,应该驻留在域层。外部实现是一个简单的调用,应该存在于基础结构中。 null 客户端使用接口,因此,对于应用层,所有这些东西都是trasparent;接下来,我们将删除
本文向大家介绍Rust 结构域,包括了Rust 结构域的使用技巧和注意事项,需要的朋友参考一下 示例 这指定任何给定的实例Struct具有生命周期'a,并且&u32存储在x中的生命周期必须至少为'a。
问题内容: 我有一系列不同的结构,都实现了协议,并试图将其传递给需要collection的函数。我知道如何使用类来解决此问题,只需创建一个,然后制作并实现。但是我想知道使用结构和协议是否可行? 这是我想要做的一个人为的例子 问题答案: 正如错误所指出的那样,问题是,您不能将具有“自我”或相关类型要求的协议用作实际类型,因为您会丢失有关这些要求的类型信息。在这种情况下,您将丢失实现参数的类型信息,因
问题内容: 我有一个想要有效地进行JSON编码的结构: 该结构包含一个已知形式的元数据和一个未知形式的目录。目录列表在运行时填充,因此我并没有真正的控制权。为了提高Go的编组速度,我想在Meta结构上实现Marshaller接口。Marshaller界面如下所示: 请记住,元结构并不像这里所示的那么简单。我尝试过在Meta结构上实现Marshaler接口,但似乎当我再将JSON编组MyStruct
图的存储结构 图的存储结构除了要存储图中各个顶点的本身信息外,同时还要存储顶点与顶点之间的所有关系(边的信息),因此,图的结构比较复杂,很难以数据元素在存储区中的物理位置来表示元素之间的关系,但也正是由于其任意的特性,故物理表示方法很多。常用的图的存储结构有邻接矩阵、邻接表等。 邻接矩阵表示法 对于一个具有n个结点的图,可以使用n*n的矩阵(二维数组)来表示它们间的邻接关系。矩阵 A(i,j) =
栈简介 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。 它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,