gpt4 book ai didi

json - 我可以使用结构向接口(interface)添加字段吗?

转载 作者:行者123 更新时间:2023-12-01 20:23:15 25 4
gpt4 key购买 nike

我遇到了一个有趣的场景。我有一个结构,我想向它添加一个字段消息。我能够通过 Can I add a field to an existing struct with Go? 做到这一点.

type User struct {
// user fields here
}

type UpdationResponse struct {
User
Message string `json:"message,omitempty"`
}

func SendSuccessResponse(w http.ResponseWriter, r *http.Request, resp interface{}) interface{} {
w.Header().Set("Content-Type", "application/json")
return json.NewEncoder(w).Encode(resp)
}
这会返回一个 JSON
{
"id": "50",
"firstName": "vibhor",
"lastName": "agrawal",
"email": "someemail@emailprovider.com",
"isVerified": false,
"joinedAt": "2020-06-28T09:45:59Z",
"fullName": "vibhor agrawal"
"message": "Profile Updated."
}
因此,这有助于我发送用户数据以及一条消息,比如“配置文件已更新。”。如果我想对我所有的 API 进行概括。有什么我可以做的。
我试过:
type SuccessResponse struct {
Data interface{}
Message string `json:"message,omitempty"`
}

func SendSuccessResponse(w http.ResponseWriter, r *http.Request, resp SuccessResponse) interface{} {
w.Header().Set("Content-Type", "application/json")
return json.NewEncoder(w).Encode(resp)
}
但是当我将它作为 JSON 发送时,它会生成一个类似的结构
{
"Data": {
"id": "50",
"firstName": "vibhor",
"lastName": "agrawal",
"email": "someemail@emailprovider.com",
"isVerified": false,
"joinedAt": "2020-06-28T09:45:59Z",
"fullName": "vibhor agrawal"
},
"message": "Profile Updated."
}
有没有一种方法可以在数据本身中添加消息并将其概括为我所有的成功响应,而不管 Data ?

最佳答案

简而言之:这是不可能的。
长答案:
在您的第一个示例中,结构 UpdationResponse扩展结构 User .这也称为混合。简单来说UpdationResponse获取 User 的所有属性并自己使用它们。
在您的第二个示例中,结构 SuccessResponse定义属性 Data可以是任何东西。 DataSuccessResponse 的子元素并被如此编码。没有办法绕过它,因为 go 源代码是静态类型的并提前编译。

关于json - 我可以使用结构向接口(interface)添加字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63087211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com