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

Другие вопросы по тегам