9

我知道这个问题可能与这个问题重复。但直到现在还没有得到满意的答复。我真的很想引起人们的注意,以便尽快找到解决方案。所以我请求你不要关闭这个问题,除非你有解决方案并在上一个问题中回答:-)

我将描述这个问题以使人信服:

我有一个存储在 mongodb 中的数据结构,众所周知,_idmongodb 是一种bson.ObjectId类型,我可以通过以下方式检索它:

type Data struct {
    Id bson.ObjectId `bson:"_id,omitempty"`
    Content string `bson:"content"`
}

然后我Data通过查找特定的查询条件得到了一个切片,并使用该切片http/template来渲染前端视图。为了操作切片中的每个项目,我想使用该Id字段,但是当使用它时:

{{range $key, $value := .DataSlice}}
  <td>{{$value.Id}}</td>
{{end}}

那只给出了一种类似于ObjectIdHex("550146d1b51bc1c208d1924d")而不是550146d1b51bc1c208d1924d很好且易于使用的字符串。

重复问题中。操作员说他找到了一种方法来解决这个问题,方法是Id_String在原始数据结构中“添加”。但我真的不知道该怎么做?这是否意味着在检索后分配它?由于我使用切片来存储检索到的数据,并且切片中的数据不能轻易更改。这样做会比使用 jquery 在前端完成工作更复杂。但是这样做只会让我心爱的 Go 感到沮丧:-(。

那么有没有更好的方法来做到这一点?

4

2 回答 2

16

bson.ObjectId类型提供了一个Hex方法,该方法将返回您正在寻找的十六进制表示,并且模板包允许对您手头的值调用任意方法,因此无需将该值以重复的形式存储在其他任何地方一个字符串。

这将起作用,例如:

<td>{{$value.Id.Hex}}</td>
于 2015-03-12T13:54:48.037 回答
0

你也可以定义结构如下

type Data struct {
    Id bson.ObjectId `json:"id" bson:"_id,"`
    Content string `json:"content" bson:"content"`
}

然后就可以<td>{{$value.Id}}</td>在模板化html的时候使用了

于 2016-10-05T13:45:00.853 回答