Подтвердить что ты не робот

Синтаксис определения странного типа в Golang (имя, затем тип, затем строковый литерал)

Я пытался выяснить, как использовать mgo (драйвер MongoDB для Go), и я наткнулся на это объявление структуры:

type Something struct {
    Id bson.ObjectId "_id,omitempty"
    Name string
}

Я не совсем понимаю синтаксис первого элемента (Id). Я понимаю, что он объявлен как тип bson.ObjectId, но что там делает литерал строки?

Мой вопрос не о функциональности драйвера mgo,
но об этом странном синтаксисе <name> <type> <string_literal>.

Я не мог найти ничего в спецификациях Go, и я тоже не знаю, как это сделать.

4b9b3361

Ответ 1

В разделе Struct types описана спецификация языка :

За декларацией поля может следовать необязательный строковый литерал тег, который становится атрибутом для всех полей в соответствующем объявлении поля. Теги становятся видимыми через интерфейс отражения, но в противном случае игнорируются.

// A struct corresponding to the TimeStamp protocol buffer.
// The tag strings define the protocol buffer field numbers.
struct {
    microsec  uint64 "field 1"
    serverIP6 uint64 "field 2"
    process   string "field 3"
}