Go 使用反射的运行时结构

Go 使用反射的运行时结构,go,Go,假设我在某种yaml文件中编写了数据模型 schema: human type: object properties: name: type: string surname: type: string 我想解析它,并生成结构: type Human struct { Name string `db:"name"` Surname string `db:"surname"` } 是否可以使用反射生成运行时Go结构?是的,您可以使用

假设我在某种yaml文件中编写了数据模型

schema: human
type: object
properties:
    name:
        type: string
    surname:
        type: string
我想解析它,并生成结构:

type Human struct {
    Name string `db:"name"`
    Surname string `db:"surname"`
}
是否可以使用反射生成运行时Go结构?

是的,您可以使用:

印刷品

{"name":"","surname":""} <nil>
{“姓名”:““姓氏”:”}
操场:


但正如其他人所说,有时候最好只生成代码。反射有时是很难的,使用它时需要很多精度。

如果你完全理解C++,请看我的问题的答案。我不知道Go,但由于语言总是生成的,最好的办法是定义一个lexer、解析器和代码生成器,输出Go,然后对生成的代码使用反射。@JimB将文件解析为Go字符串并对其进行反射?正如@JimB已经提到的,您无法在运行时生成类型,但是您可以在go generate工具的帮助下生成代码。在这里可以看到更多:@finnrayment:对包含代码的字符串进行反思不会有任何效果,它们仍然只是字符串。如果您在编译时没有类型,那么它们就不存在。对不起,我应该提到您可以构建结构,但是您不能定义类型,因此当您试图在代码中组合它时,它的有用性将受到限制。
{"name":"","surname":""} <nil>