如何合并2个结构

时间:2019-03-15 02:01:46

标签: go

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

我有两个带有数据的变量

MyNewKeyDataMyNewStruct

我想要,但是不知道如何合并MyNewKeyData中的这两个数据,以便MyStructData中的所有内容都将成为密钥的根,而MyNewKey中的所有内容都将成为密钥。 theObjectIWant := MyNewStruct { MyStructData, "MyNewKey" : MyNewKeyData }

我正在尝试

{{1}}

但不起作用

2 个答案:

答案 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)
}