当前位置: 首页 > 面试题库 >

如何从嵌入式结构的方法反映包含结构的字段?

段干俊茂
2023-03-14
问题内容

该程序的输出是 map [] ,但我想要 map [Id:true name:true]

我试图弄干我的一些SQL
CRUD代码,并认为嵌入处理读和写数据库的持久性结构会很好。在下面的示例中,持久性结构将为Inner,而我的模型将为Outer。谢谢!

http://play.golang.org/p/fsPqJ-6aLI
package main

import (
    "fmt"
    "reflect"
)

type Inner struct {
}

type Outer struct {
    Inner
    Id   int
    name string
}

func (i *Inner) Fields() map[string]bool {
    typ := reflect.TypeOf(*i)
    attrs := make(map[string]bool)

    if typ.Kind() != reflect.Struct {
        fmt.Printf("%v type can't have attributes inspected\n", typ.Kind())
        return attrs
    }

    // loop through the struct's fields and set the map
    for i := 0; i < typ.NumField(); i++ {
        p := typ.Field(i)
        if !p.Anonymous {
            v := reflect.ValueOf(p.Type)
            v = v.Elem()
            attrs[p.Name] = v.CanSet()

        }
    }

    return attrs
}

func main() {
    val := Outer{}
    fmt.Println(val.Fields()) // prints map[], but I want map[Id:true name:true]
}

问题答案:

你不能 您专门在上调用了一个方法Inner,该方法不知道其嵌入位置。嵌入不是继承,它是简单的自动委派。

您可能希望将它们包装在一个通用的持久性接口中,或者甚至是一个可以处理数据类型持久性的通用函数

现在,如果您 真的 想尝试此操作,则可以通过指针地址访问外部结构,但是您将需要知道要访问的外部类型,这意味着您无法通过反射来获取它。

outer := (*Outer)(unsafe.Pointer(i))
typ := reflect.TypeOf(*outer)


 类似资料:
  • 问题内容: 我想在结构上定义一个方法来验证http请求。但是我在访问结构域时遇到一些问题。 有我的代码。 运行此代码时,得到以下结果 有什么方法可以访问Validate2()方法上的Validate()方法上的结构字段? 问题答案: 您不能从内部结构访问外部结构字段。仅内部字段来自外部。您可以做的是:

  • 问题内容: 是否可以在不使用嵌入式结构的情况下继承类型的方法? 代码的第一个片段是将结构嵌入其中的工作代码,我可以在上调用该方法。我不喜欢的是,当我初始化时,我有(?)来初始化其中的结构。有没有解决的办法? 最终,我想做以下事情。where 是类型和初始化位置,也不需要初始化结构。以下代码不起作用,但可能清楚我的目标是什么。 我将添加更多使用的方法的结构,这就是我要问的原因。如果只拥有,我将拥有可

  • 问题内容: 我知道如何在同一包中的结构中嵌入其他结构,但是如何在其他包的结构中嵌入结构? dog.go main.go 当我运行main.go时,它告诉我一个错误: 问题答案: @simon_xia是正确的,看来您 可能 对Go有点陌生。 首先,欢迎来到社区!! 现在,请扩展一下他的评论… Go并未提供成员/方法的公共/私有范围,而是具有Exporting的概念。因此,如果要允许从另一个包访问方法

  • 问题内容: 包: struct中的匿名接口是什么意思? 问题答案: 通过这种方式,反向实现了,我们可以覆盖特定的方法而不必定义所有其他方法 请注意,这里是如何交换而不是交换的,这也是为struct声明的唯一方法,即使实现 无论此方法内部传递了什么结构,我们都会将其转换为新的结构。 真正的价值在于,如果您认为如果无法采用这种方法,该怎么办。 向吗?添加另一种方法? 创建另一个ReverseInter

  • 我希望在使用neo4j数据库的应用程序中使用此结构。 在这里,我将在三个不同的服务器上部署我的应用程序,每个服务器都有自己的嵌入式neo4j数据库。 我希望所有数据库都自动同步。 它适合我的大数据应用程序吗? 我正在使用SpringDataNeo4j,如何在SDN中配置此结构。 我需要企业版的neo4j为此。 有没有其他可以使用的框架/技术? 我几乎完成了这样的结构 我的Web应用程序部署在 >

  • 问题内容: 我有以下几种类型: 我可以使用use ,但是我 不能 使用 似乎可以嵌入语法,但是使用它无效吗? 问题答案: 嵌入式类型是(未命名的)字段,由不合格的类型名称引用。 规格:结构类型: 使用类型但没有显式字段名称声明的字段是 匿名字段 ,也称为 嵌入式 字段或该类型在结构中的嵌入。必须将嵌入式类型指定为类型名称或指向非接口类型名称的指针,并且本身不能为指针类型。 非限定类型名称充当字段名