go - 如何确定类型是否为结构

标签 go reflection struct

假设我有 2 个结构:

type Base struct {
 id int
 name string
}

type Extended struct {
 Base
 Email string
 Password string
}

我想反射(reflect)扩展结构以获取它的字段:

e := Extended{}
e.Email = "me@mail.com"
e.Password = "secret"

for i := 0 ; i < reflect.TypeOf(e).NumField() ; i++ {
  if reflect.TypeOf(e).Field(i) != "struct" {  << how to do this validation?
    fmt.Println(reflect.ValueOf(e).Field(i))
  }
}

最佳答案

只需检查 Value 的 Kind()

if reflect.ValueOf(e).Field(i).Kind() != reflect.Struct {
    fmt.Println(reflect.ValueOf(e).Field(i))
}

关于go - 如何确定类型是否为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42065226/

相关文章:

go - 在 golang 反射 FieldByName 中忽略大小写

C#:像 "bool"或 "double"这样的字符串到实际类型?

c++ - C++ 初级程序员。帮助将结构传递给函数...?

c - 在 C 中初始化结构数组

javascript - 如何使用 Go 驱动程序或 Golang 在 Mongodb 中插入 javascritpt 函数

go - 不断重新连接到 Cassandra

c# - 如何动态生成和填充多维数组

c - 如何使用带有结构数组的指针?

go - 如何从一个字节中解压缩 2、2 和 3 位

当对象包含 'init' 时,Java 反射初始化 Kotlin 对象失败