Golang + MongoDB嵌入式类型(在另一个结构中嵌入一个结构)

萨莫尔:

假设,我运行一个API,当用户在用户资源上发出GET请求时,我将返回相关字段作为JSON

type User struct {
  Id      bson.ObjectId `json:"id,omitempty" bson:"_id,omitempty"`
  Name    string        `json:"name,omitempty" bson:"name,omitempty"`
  Secret  string        `json:"-,omitempty" bson:"secret,omitempty"`
}

如您所见,User中的Secret字段为json:"-"这意味着在大多数操作中,我都不想返回。在这种情况下,响应将是

{
  "id":1,
  "Name": "John"
}

json:"-"忽略该字段将不会返回该字段机密

现在,我正在打开一个我想返回秘密字段的管理员专用路由。但是,这将意味着复制User结构。

我当前的解决方案如下所示:

type adminUser struct {      
  Id      bson.ObjectId `json:"id,omitempty" bson:"_id,omitempty"`
  Name    string        `json:"name,omitempty" bson:"name,omitempty"`
  Secret  string        `json:"secret,omitempty" bson:"secret,omitempty"`
}

有没有一种方法可以将User嵌入adminUser中?有点像继承:

type adminUser struct {      
  User
  Secret  string        `json:"secret,omitempty" bson:"secret,omitempty"`
}

上面的方法目前不起作用,因为在这种情况下将仅返回字段密码。

注意:在实际的代码库中,有几十个字段。因此,复制代码的成本很高。

实际的mongo查询如下:

func getUser(w http.ResponseWriter, r *http.Request) {
  ....omitted code...

  var user adminUser
  err := common.GetDB(r).C("users").Find(
      bson.M{"_id": userId},
  ).One(&user)
  if err != nil {
      return
  }
  common.ServeJSON(w, &user)
}
埃文·肖(Evan Shaw):

您应该看一下bson包的内联标志(记录在bson.Marshal)。它应该允许您执行以下操作:

type adminUser struct {
    User `bson:",inline"`
    Secret string `json:"secret,omitempty" bson:"secret,omitempty"`
}

不过,现在你会发现,你得到重复键错误,当您试图从这种结构的数据库中读取,因为两者adminUserUser包含的关键secret

在您的情况下,我将从中删除该Secret字段,User而只保留其中的一个adminUser然后,每当需要写入secret字段时,请确保使用adminUser

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Golang嵌入式结构类型

在golang中的另一个结构中重用结构

golang结构的另一个func更改映射

Golang Map结构在另一个

Golang:另一个结构的XML属性

收听以调用Golang中另一个结构使用的结构函数

Golang嵌入式结构

另一个文件中同一包中的golang参考结构

在Golang中将值从一个结构复制到另一个

使用属于Golang中另一个包的结构

在golang中使用相同结构中的func引用另一个字段

Golang将结构分配给另一个结构字段不起作用

Golang在另一个结构的方法内更改结构的值

从另一个包中导入结构时的私有嵌入式结构

golang:打包一个结构

mgo,mongodb:从嵌入式结构中查找与一个字段匹配的文档

在Golang错误中从一个指针转换为另一个指针类型

父结构上的Golang嵌入式接口

方法重载时,Golang结构调用嵌入式类型方法

如何从Go / Golang中的另一个方法表达式中访问方法表达式(结构函数)?

从mongo引擎中的另一个嵌入式文档访问嵌入式文档

比较一个字段golang以外的结构

为Golang结构字段分配一个新值

将go结构嵌入gorm中的另一个结构

如何使用Golang从一个函数返回不同类型的结构?

Golang中带有嵌入式锁的泛型结构的集合

GoLang的类型转换到由结构体和嵌入式结构体实现的接口的工作方式

自定义类型的Golang切片在另一个类型中作为参考

Golang使用嵌入式模板初始化结构:结构初始化程序中的值太少