猿问

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)

}


RISEBY
浏览 302回答 2
2回答
随时随地看视频慕课网APP

相关分类

Go
我要回答