gpt4 book ai didi

Golang 计算结构结构中的字段数

转载 作者:行者123 更新时间:2023-12-05 04:22:59 27 4
gpt4 key购买 nike

给定一个结构 CompleteStruct,它由两个嵌入式结构 StructAStructB 组成,其中 StructBImbStructC 在里面。

type StructA struct {
AA int
AB int
AC int
}
type ImbStructC struct {
BCC int
}
type StructB struct {
BA int
BB int
ImbStructC
}

type CompleteStruct struct {
StructA
StructB
}

如何提取内部结构中的字段总数?

reflect.TypeOf(CompleteStruct{}).NumField())

返回 2,我假设是因为 CompleteStruct 由 2 个嵌入式结构组成。

我可以使用什么代码来显示 CompleteStruct 有 6 个字段?

最佳答案

需要递归来解决这个问题,因为嵌入的结构字段本身可能嵌入另一个结构。

另外,应该注意不要将嵌入式结构算作字段 - 这些在 reflect 包中被列为“匿名”字段:

func countFields(v any) int {
return rvCountFields(reflect.ValueOf(v))
}

func rvCountFields(rv reflect.Value) (count int) {

if rv.Kind() != reflect.Struct {
return
}

fs := rv.NumField()
count += fs

for i := 0; i < fs; i++ {
f := rv.Field(i)
if rv.Type().Field(i).Anonymous {
count-- // don't count embedded structs (listed as anonymous fields) as a field
}

// recurse each field to see if that field is also an embedded struct
count += rvCountFields(f)
}

return
}

https://go.dev/play/p/IjOllo86_xk

输出:

main.CompleteStruct : count = 5
main.StructA : count = 3
main.StructB : count = 2
main.StructC : count = 6
main.StructD : count = 12
main.Empty : count = 0
int : count = 0

关于Golang 计算结构结构中的字段数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73838001/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com