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

递归扩展结构定义?

席俊达
2023-03-14
问题内容

如何扩展结构定义以显示嵌套类型?例如,我想扩展这个

type Foo struct {
  x int
  y []string
  z Bar
}
type Bar struct {
  a int
  b string
}

像这样:

type Foo struct {
  x int
  y []string
  z Bar
    struct {
      a int
      b string
    }
}

上下文:对现有代码进行逆向工程。


问题答案:

您可以尝试按照以下方式进行操作,以列出结构中定义的所有字段,然后递归列出以这种方式找到的结构。

它不能完全产生您所要求的输出,但是非常接近,并且可以进行调整。

package main

import (
    "reflect"
    "fmt"
)

type Foo struct {
  x int
  y []string
  z Bar
}
type Bar struct {
  a int
  b string
}

func printFields(prefix string, t reflect.Type) {
    for i := 0; i < t.NumField(); i++ {
        f := t.Field(i)
        fmt.Printf("%v%v %v\n", prefix, f.Name, f.Type)
        if f.Type.Kind() == reflect.Struct {
            printFields(fmt.Sprintf("  %v", prefix), f.Type)
        }
    }    
}

func printExpandedStruct(s interface{}) {
    printFields("", reflect.ValueOf(s).Type())
}

func main() {
    printExpandedStruct(Foo{})
}

由于上述原因,我得到了此输出:

x int
y []string
z main.Bar
  a int
  b string


 类似资料:
  • 问题内容: 我想扩展一些递归的属性(又名深度复制)。就像jQuery一样。我不只包括jquery一件事的b / c。 您知道有什么优雅的方法可以使用简单的javascript或angularjs吗? 更新, 请看看并尝试完成相同的结果 http://plnkr.co/edit/GHabYbyhsqtfBPtplksO?p=preview 我确实调查了.copy()但“属性(对象)已删除” 问题答案

  • 作者:陈希章 发表于 2018年4月7日 前言 此前我有一篇 文章 讲解了Microsoft Graph的一种数据扩展技术—— 开发扩展(Open Extensions),它可以实现在支持的对象(例如用户,组等)上面附加任意的数据。但开放扩展的问题在于,它是基于某个具体对象的,你无法确定两个对象是否具有同样的扩展(即便属性名一样,但也可能其包含的数据完全不同)。如果我们需要对一类对象进行统一的扩展

  • 问题内容: 我有一个将位置链接在一起的数据库表;一个位置可以在一个位置,也可以在另一个位置内。 这是深入探讨MySQL / PHP的深度: 在给定父级位置的情况下,如何使用MySQL如何获得其所有后代位置,无论深度如何? 问题答案: mysql.com上有 一篇漂亮的文章 ,概述了管理分层数据的各种方法。我认为它为您的问题提供了完整的解决方案,并显示了各种不太简单但较快的方法(例如嵌套集)。

  • 问题内容: 我已经为C中的驱动程序开发了一个DLL。我用C ++编写了一个测试程序,并且DLL可以正常工作。 现在,我想使用Python与该DLL进行交互。我已经成功隐藏了大多数用户定义的C结构,但是有一点我必须使用C结构。我是python的新手,所以我可能会出错。 我的方法是使用ctype在python中重新定义一些结构,然后将该变量传递给我的DLL。但是在这些类中,我有一个自定义链接列表,其中

  • 作者:陈希章 发表于 2018年1月2日 前言 Microsoft Graph是一张拥有巨大价值的网络,它定义了包括Office 365在内的资源的实体及其关系,它的价值体现在,随着用户积累的数据越来越多,经过授权的应用程序可以在这些数据的基础上得到很多有价值的信息,并且帮助用户更好地完成工作。 Microsoft Graph也是Office 365从单纯的SaaS平台向PaaS平台(Office

  • 问题内容: 我主要使用Python,但是正在玩Go。我写了下面的代码来做一些在python中非常简单的事情,希望它也可以在Go中完成。 如您所见,有两个自定义结构,每个自定义结构都递归地包含对另一个的引用。当我尝试使用gob将一个文件打包到一个文件中时,它会编译,但是出现堆栈溢出,我认为这是由递归引起的。以我的经验,泡菜会像处理抽水一样轻松。我究竟做错了什么? 问题答案: 到目前为止,该程序包不适