在 Golang 中动态创建结构
Dynamically Create Structs in Golang
所以我正在使用外部 API,我想解析其响应。传入的响应具有固定格式,即
type APIResponse struct {
Items []interface{} `json:"items"`
QuotaMax int `json:"quota_max"`
QuotaRemaining int `json:"quota_remaining"`
}
因此,对于每个响应,我都在解析项目。现在,根据请求,项目可以是 diff 类型。它可以是网站、文章等的一部分,它们都有各自的模型。喜欢:
type ArticleInfo struct {
ArticleId uint64 `json:"article_id"`
ArticleType string `json:"article_type"`
Link string `json:"link"`
Title string `json:"title"`
}
type SiteInfo struct {
Name string `json:"name"`
Slug string `json:"slug"`
SiteURL string `json:"site_url"`
}
有什么办法,在解析输入时在API响应中定义Items
的类型。我不想为各个响应创建单独的类型。
基本上想将任何传入的响应解组到 APIResponse 结构中。
将 Items
字段的类型更改为 interface{}
:
type APIResponse struct {
Items interface{} `json:"items"`
...
}
将响应 Items
字段设置为所需类型的指针。解组响应:
var articles []ArticleInfo
response := APIResponse{Items: &articles}
err := json.Unmarshal(data, &response)
使用变量 articles
访问文章。
所以我正在使用外部 API,我想解析其响应。传入的响应具有固定格式,即
type APIResponse struct {
Items []interface{} `json:"items"`
QuotaMax int `json:"quota_max"`
QuotaRemaining int `json:"quota_remaining"`
}
因此,对于每个响应,我都在解析项目。现在,根据请求,项目可以是 diff 类型。它可以是网站、文章等的一部分,它们都有各自的模型。喜欢:
type ArticleInfo struct {
ArticleId uint64 `json:"article_id"`
ArticleType string `json:"article_type"`
Link string `json:"link"`
Title string `json:"title"`
}
type SiteInfo struct {
Name string `json:"name"`
Slug string `json:"slug"`
SiteURL string `json:"site_url"`
}
有什么办法,在解析输入时在API响应中定义Items
的类型。我不想为各个响应创建单独的类型。
基本上想将任何传入的响应解组到 APIResponse 结构中。
将 Items
字段的类型更改为 interface{}
:
type APIResponse struct {
Items interface{} `json:"items"`
...
}
将响应 Items
字段设置为所需类型的指针。解组响应:
var articles []ArticleInfo
response := APIResponse{Items: &articles}
err := json.Unmarshal(data, &response)
使用变量 articles
访问文章。