首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归扩展结构定义?

递归扩展结构定义?
EN

Stack Overflow用户
提问于 2017-03-16 03:45:48
回答 1查看 483关注 0票数 2

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

代码语言:javascript
复制
type Foo struct {
  x int
  y []string
  z Bar
}
type Bar struct {
  a int
  b string
}

类似这样的东西:

代码语言:javascript
复制
type Foo struct {
  x int
  y []string
  z Bar
    struct {
      a int
      b string
    }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-16 11:36:23

您可以尝试使用这些方法来列出在结构中定义的所有字段,并递归地列出在该方法中找到的结构。

它不能精确地产生您所要求的输出,但它非常接近,并且可能可以进行调整以实现这一点。

代码语言:javascript
复制
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{})
}

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

代码语言:javascript
复制
x int
y []string
z main.Bar
  a int
  b string
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42819318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档