Синтаксис определения странного типа в Golang (имя, затем тип, затем строковый литерал)
Я пытался выяснить, как использовать mgo (драйвер MongoDB для Go), и я наткнулся на это объявление структуры:
type Something struct {
Id bson.ObjectId "_id,omitempty"
Name string
}
Я не совсем понимаю синтаксис первого элемента (Id). Я понимаю, что он объявлен как тип bson.ObjectId
, но что там делает литерал строки?
Мой вопрос не о функциональности драйвера mgo,
но об этом странном синтаксисе <name> <type> <string_literal>
.
Я не мог найти ничего в спецификациях Go, и я тоже не знаю, как это сделать.
Ответы
Ответ 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"
}