将嵌入式结构复制到新结构中,而不必复制其所有字段

时间:2020-06-26 14:31:26

标签: go

我有一个逻辑结构

type MyStruct struct {
  F1 string
  F2 string
}

我想将类型MyStruct的值保存到文档数据库,仅添加一个时间戳。因此,我创建了一个嵌入MyStruct

的新结构
type MyStructForDB {
  MyStruct
  Ts         time.Time
}

在saveToDb函数中,执行以下操作

func saveToDb(s MyStruct) {
  sDb := MyStructForDB{
    s, time.Now()
  }
  // execute the update on the DB
}

如果我这样进行,则在数据库上找到具有以下结构的文档

{
  myStruct: {
    f1: "a value"        // any value that was in s.F1
    f2: "another value"  // any value that was in s.F2
  }
  ts: 2020-06-26T14:15:07.050Z  // a timestamp value
}

虽然可以,但我不希望看到myStruct属性,而不会看到像这样的扁平文档

{
   f1: "a value"        // any value that was in s.F1
   f2: "another value"  // any value that was in s.F2
   ts: 2020-06-26T14:15:07.050Z  // a timestamp value
}

我知道我可以逐个复制字段或使用反射来完成此操作,但我只是想知道是否有更简单的方法来实现此目的

1 个答案:

答案 0 :(得分:1)

在DocumentDB中,您可以使用inline包的bson标志来展平嵌入式结构

type MyStructForDB {
  MyStruct   `bson:",inline"`
  Ts         time.Time
}