go - 在 Go 中通过反射创建结构

标签 go

我想完全动态地定义一个结构,这样我就可以得到下面的结构,但不需要先定义它?

type Data struct {
   a string
   b int `json:"b"`
}
d := Data{}

最佳答案

应用程序可以使用 reflect.StructOf 以编程方式创建结构, 但结构中的所有字段都必须是 exported .

问题将结构作为值获取,但指向结构的指针可能对应用程序更有用。

鉴于上述情况,此答案显示了如何在编译时不定义类型的情况下执行以下操作:

type Data struct {
   A string `json:"a"`
   B int `json:"b"`
}
var d interface{} = &Data{}

代码是:

t := reflect.StructOf([]reflect.StructField{
    {
        Name: "A",
        Type: reflect.TypeOf(int(0)),
        Tag:  `json:"a"`,
    },
    {
        Name: "B",
        Type: reflect.TypeOf(""),
        Tag:  `json:"B"`,
    },
})
d := reflect.New(t).Interface()

这是一个设置一些字段的可运行示例:https://play.golang.org/p/uik7Ph8_BRH

关于go - 在 Go 中通过反射创建结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57567466/

相关文章:

golang Unmarshal Struct In Function 不知道类型和依赖接口(interface)

string - 如何根据 rune 而不是 Go 中的字节获取子字符串索引?

postgresql - 如何使用 Go 提取 postgres 时间戳范围?

golang bcrypt 以字节为单位返回

google-app-engine - App Engine Datastore 上的 Golang - 使用 PutMulti 提高性能

testing - 如何在 Golang 中测试日志记录(log.Println)?

go - 当作为方法 arg 传递时,无类型常量 '\n' 如何转换为字节?

go - os.Error - 字符串值(Golang)

Golang - 将 exec 输出复制到缓冲区

xml - 如何以 slice 格式解析XML