gpt4 book ai didi

go - 我们可以通过反射更新结构字段上的标签吗?

转载 作者:数据小太阳 更新时间:2023-10-29 03:41:37 25 4
gpt4 key购买 nike

我想知道我们是否可以在将数据解码到其中之前更新结构实例上的标记。

type Response struct {
Name string `json:"name"`
Payload json.RawMessage `json:"default"`
}

var data Response
<update tag on data.Payload to say `json:"id"`>
json.Unmarshal(server_response, &data)

动机是在 Response 结构中加载公共(public)键,并通过传递原始 Payload 将特定于 API 的响应委托(delegate)给 API 处理程序。

Payload 字段是复杂的结构,因此在它们自己的处理程序中进行解析使其更清晰。

需要应用标签,让 json.Unmarshal 知道 server_response 中的哪个键映射到 Payload。

元数据字段(如名称)需要一些验证。因此,如果我将整个响应传递给处理程序,每个处理程序都必须提取每个字段并返回此元数据,这不是一种非常干净的方法。

对 map[string]interface{} 的解码响应也会导致同样的问题。我想要一个结构中的所有元数据字段,自动填充和处理程序来解析有效负载。解码为通用 map ,意味着复制 key 。

例子:

type Response struct {
Version int
Name string
Hash string
Payload json.RawMessage
}

希望 main 函数在这个对象中加载服务器响应,能够进行各种验证并将 Payload 传递给处理程序,让它处理它。

使用通用 map 意味着编写如下代码:decodedData.Version = genericMap[“版本”]这不会扩展到很多键。

最佳答案

如果我正确理解您的问题,您为什么不直接将整个响应传递给处理程序?然后处理程序将知道是否需要从 statsid 或任何字段读取... https://play.golang.org/p/pQXa3Gm_WS0大致展示了这个想法。

另一种方法是将您的响应解码为 map[string]interface{} 并使用 https://github.com/mitchellh/mapstructure之后将部分响应解码为结构。

关于go - 我们可以通过反射更新结构字段上的标签吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57691595/

25 4 0