如何合并2个结构

Bob*_*bby 4 go

我正在尝试在 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)

我有两个带有数据的变量,

MyStructDataMyNewKeyData

我想,但不知道如何将这两个数据合并到里面,MyNewStruct这样 MyStructData 中的所有内容都将位于 key 的根目录中,并且其中的所有内容都MyNewKeyData将成为 keyMyNewKey

我正在尝试类似的东西

    theObjectIWant := MyNewStruct {
        MyStructData,
        "MyNewKey" : MyNewKeyData 
    }
Run Code Online (Sandbox Code Playgroud)

但不起作用

Chr*_*lor 5

在结构中创建匿名成员时,编译器会为该成员生成一个与类型名称相同的名称。您可以在初始化包含结构时使用此名称。

这是一个简化的例子

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)