我正在尝试在 Go 中修改一些东西。我创建了以下结构
我有一个 API 调用返回这样的东西
MyStruct struct {
DID string `bson:"d_id" json:"d_id"`
PID string `bson:"p_id" json:"p_id"`
...
}
Run Code Online (Sandbox Code Playgroud)
在代码中的一次调用中,我想向该结构附加一个新键
喜欢
myNewStruct {
DID string `bson:"d_id" json:"d_id"`
PID string `bson:"p_id" json:"p_id"`
...
MyNewKey string `bson:"new_key" json:"new_key"`
}
Run Code Online (Sandbox Code Playgroud)
问题是,我想添加一个新键,并将其余键保留在对象的根部,就像上面的对象一样。无需重写完整的对象结构,或对每个键执行 for 循环。
type MyNewStruct struct {
*MyStruct
MyNewKey MyValueType
}
Run Code Online (Sandbox Code Playgroud)
我有两个带有数据的变量,
MyStructData
和 MyNewKeyData
我想,但不知道如何将这两个数据合并到里面,MyNewStruct
这样 MyStructData 中的所有内容都将位于 key 的根目录中,并且其中的所有内容都MyNewKeyData
将成为 keyMyNewKey
我正在尝试类似的东西
theObjectIWant := MyNewStruct {
MyStructData,
"MyNewKey" : MyNewKeyData
}
Run Code Online (Sandbox Code Playgroud)
但不起作用
在结构中创建匿名成员时,编译器会为该成员生成一个与类型名称相同的名称。您可以在初始化包含结构时使用此名称。
这是一个简化的例子
type MyStruct struct {
DID string
PID string
}
type MyNewStruct struct {
MyStruct
MyNewKey string
}
ms := MyStruct{
DID: "did",
PID: "pid",
}
m := MyNewStruct{
MyStruct: ms,
MyNewKey: "test",
}
Run Code Online (Sandbox Code Playgroud)