Каково использование обратного хода в определении golang structs?
type NetworkInterface struct {
Gateway string `json:"gateway"`
IPAddress string `json:"ip"`
IPPrefixLen int `json:"ip_prefix_len"`
MacAddress string `json:"mac"`
...
}
Я довольно смущен, что функция содержимого в backtick, например json:"gateway"
.
Это просто комментарий, например //this is the gateway
?
Ответы
Ответ 1
Вы можете добавить дополнительную метаинформацию в структуры Go в виде тегов. Вот несколько примеров использования.
В этом случае json:"gateway"
используется json package для кодирования значения Gateway
в ключе Gateway
в соответствующем json-объекте.
Пример:
n := NetworkInterface{
Gateway : "foo"
}
json.Marshal(n)
// will output `{"gateway":"foo",...}`
Ответ 2
Они теги:
За объявлением поля может следовать необязательный тег строкового литерала, который становится атрибутом для всех полей соответствующего полевая декларация. Теги становятся видимыми через отражение интерфейс и принять участие в идентификации типов для структур, но в противном случае игнорируются.
// 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"
}
См. этот вопрос и ответ для более подробного объяснения и ответа.
обратные кавычки используются для создания исходных строковых литералов, которые могут содержать любой тип символа:
Строковые литералы строки представляют собой последовательности символов между обратными кавычками ``. В кавычках любой символ является законным, кроме обратной цитаты.