登录
首页 >  Golang >  Go问答

动态创建结构体

来源:stackoverflow

时间:2024-04-10 15:36:32 394浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《动态创建结构体》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

我想使用 api 以 json 形式与应用程序进行通信。

此应用程序有一个包含此字段的结构:

customfields interface{} `json:"custom_fields,omitempty"`

调用 api 时,这部分可能类似于:

"custom_fields": {
  "Field1": "Value1",
  "Field2": "Value2"
}

自定义字段的字段名称不固定。它们可以在应用程序中设置。所以我不能只创建一个结构。我需要在代码中动态构建结构。这可能吗?


解决方案


构建 json 时,您可以使用 interface{} 变量所拥有的任何结构:

data.customfields=mystructvar

上面的 mystructvar 是可以编组为 json 的任何结构。

如果您没有自定义字段的结构,则可以使用 map[string] 接口{}

data.customfields=map[string]interface{}{"field1":"value1",
"field2":"value2"}

当您解组 json 输入时,interface{} 自定义字段将被解组为 map[string]interface{}(如果它是 json 对象),[]interface{}(如果它是 json)数组,或作为原始值之一(字符串、float64、布尔)。

不要对自定义字段使用空接口,而是使用 map[string]接口{}

type Payload struct {
    Field1 string `json:"field1"`
    Field2 int `json:"field2"`
    CustomFields map[string]interface `json:"customFields,omitempty`
}

Full working example

理论要掌握,实操不能落!以上关于《动态创建结构体》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>