mgo将bson.objectId转换为html模板中的字符串(十六进制)

arm*_*ong 9 go mgo objectid go-html-template

我知道这个问题可能与问题重复.但到目前为止还没有得到满意的答案.我真的想引起一些关注,尽快找到解决方案.所以我请求你不要关闭这个问题,除非你有解决方案并在前一个问题中回答:-)

我将描述说服的问题:

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

type Data struct {
    Id bson.ObjectId `bson:"_id,omitempty"`
    Content string `bson:"content"`
}
Run Code Online (Sandbox Code Playgroud)

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

{{range $key, $value := .DataSlice}}
  <td>{{$value.Id}}</td>
{{end}}
Run Code Online (Sandbox Code Playgroud)

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

重复的问题.操作人员说,他找到了一种解决方法,通过"添加Id_String"原始数据结构来解决这个问题.但我真的不知道该怎么做?这是指在检索后分配它吗?由于我使用切片来存储检索到的数据,因此切片中的数据无法轻易更改.这样做比使用jquery做前端的工作要复杂得多.但这样做只会让我心爱的Go: - (.

那么还有更好的方法吗?

Gus*_*yer 15

bson.ObjectId类型提供了一个十六进制的方法,将返回你正在寻找的十六进制表示,和模板包允许一个打电话给你手头值任意方法,所以没有必要存储在口是心非该值作为其他任何地方一个字符串.

这可行,例如:

<td>{{$value.Id.Hex}}</td>
Run Code Online (Sandbox Code Playgroud)