我正在尝试修改Go中的某些内容。我有以下创建的结构
我有一个API调用,返回了这样的内容
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"`
}
在代码中的一次调用中,我想向该结构附加一个新键
喜欢
type MyNewStruct struct {
*MyStruct
MyNewKey MyValueType
}
问题是,我想添加一个新键,并将其余键保留在对象的根目录下,就像上面的对象一样。无需重写完整的对象结构或对每个键进行for循环。
MyStructData
我有两个带有数据的变量
MyNewKeyData
和MyNewStruct
我想要,但是不知道如何合并MyNewKeyData
中的这两个数据,以便MyStructData中的所有内容都将成为密钥的根,而MyNewKey
中的所有内容都将成为密钥。 theObjectIWant := MyNewStruct {
MyStructData,
"MyNewKey" : MyNewKeyData
}
我正在尝试
{{1}}
但不起作用
答案 0 :(得分:4)
当您在结构中创建匿名成员时,编译器会为该成员生成一个与类型相同的名称。初始化包含的结构时,可以使用此名称。
这是一个简化的示例
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",
}
答案 1 :(得分:1)
我不确定我是否完全了解您的要求,但这可能会有所帮助。
type MyStruct struct {
DID string
PID string
}
type myNewStruct struct {
MyStruct
newKey string
}
func main() {
s1 := MyStruct{DID: `bson:"d_id" json:"d_id"`}
s2 := myNewStruct{MyStruct: s1, newKey: `bson:"new_key" json:"new_key"`}
fmt.Println(s2.DID)
fmt.Println(s2.newKey)
}