
在 go + mgo(或旧版 mongodb 驱动)开发中,直接在 html 模板中调用 `{{.id.hex}}` 即可将 `bson.objectid` 转换为纯十六进制字符串(如 `550146d1b51bc1c208d1924d`),无需额外字段、无需预处理切片,简洁高效。
bson.ObjectId 类型本身提供了 Hex() 方法,返回标准的 24 位小写十六进制字符串(即 ObjectId 的原始 hex 表示),该方法符合 Go 模板的「方法链调用」规范——只要字段可导出、方法无参数且返回值可被模板安全渲染,即可在 .html 模板中直接调用。
✅ 正确用法如下(在 html/template 中):
{{range $key, $value := .DataSlice}}
{{$value.Id.Hex}}
{{$value.Content}}
{{end}}⚠️ 注意事项:
- Id 字段必须是导出字段(首字母大写),如 Id bson.ObjectId ✅;若写成 id bson.ObjectId ❌,模板无法访问。
- Hex() 方法无参数、返回 string,完全兼容模板语法;不可写作 {{.Id.Hex()}}(Go 模板中省略括号)。
- 若使用较新驱动(如 go.mongodb.org/mongo-driver/bson),ObjectID 类型对应方法为 .Hex() 同样可用,但需确认类型别名与导入路径一致。
- 不推荐在结构体中冗余添加 IdString string 字段或遍历切片手动赋值——既破坏数据一致性,又增加维护成本。
? 进阶提示:如需在模板中校验 ObjectId 有效性(避免空 ID 渲染异常),可结合 if 判断:
{{if $value.Id.Valid}}
查看详情
{{else}}
无效ID
{{end}}(注:Valid() 方法在 mgo.v2 中存在,返回 bool,表示该 ObjectId 是否为有效十六进制格式)
综上,利用 {{.Id.Hex}} 是最轻量、最符合 Go 惯例的解决方案——零侵入、零冗余、一次书写,处处可用。










