MGO преобразовать bson.objectId в строку (шестнадцатеричный) в HTML-шаблон
Я знаю, что эта проблема, возможно, дублирует эту. Но до сих пор не получил удовлетворительного ответа. И я действительно хочу привлечь внимание, чтобы как можно скорее найти решение. Поэтому я прошу вас не закрывать этот вопрос, если у вас нет решения и вы ответили на него в предыдущем:-)
Я опишу проблему для убеждения:
У меня есть структура данных, которая была сохранена в mongodb, как известно, _id
Монгодб является 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:-(.
Так есть ли лучший способ сделать это?
2 ответа
Тип bson.ObjectId предлагает метод Hex, который будет возвращать искомое шестнадцатеричное представление, а пакет шаблонов позволяет вызывать произвольные методы для значений, которые у вас есть, поэтому нет необходимости хранить это значение в двух местах в другом месте, так как строка.
Это будет работать, например:
<td>{{$value.Id.Hex}}</td>
Вы также можете определить структуру следующим образом
type Data struct {
Id bson.ObjectId `json:"id" bson:"_id,"`
Content string `json:"content" bson:"content"`
}
Тогда вы можете использовать <td>{{$value.Id}}</td>
при шаблонировании HTML