在 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 访问文章。

Run an example on the playground.