type Config struct {
CommitIndex uint64 `json:"commitIndex"`
// TODO decide what we need to store in peer struct
Peers []*Peer `json:"peers"`
}
Я понимаю первые 2 колонки. Но, что такое json: "commitIndex"
спасибо.
type Config struct {
CommitIndex uint64 `json:"commitIndex"`
// TODO decide what we need to store in peer struct
Peers []*Peer `json:"peers"`
}
Я понимаю первые 2 колонки. Но, что такое json: "commitIndex"
спасибо.
Он называется тегом struct, он может быть проанализирован с помощью пакета reflect
во время выполнения.
Из https://golang.org/ref/spec#Struct_types:
За объявлением поля может следовать необязательный тег строкового литерала, который становится атрибутом для всех полей в соответствующем объявлении поля.
Теги становятся видимыми через интерфейс отражения и принимают участие в идентификаторе типа для структур, но в противном случае игнорируются.
Некоторые пакеты, которые используют отражение, например json
и xml
используйте теги, чтобы лучше обрабатывать специальные случаи.
То, о чем вы говорите, называется тегом, а Перейти спецификации:
За объявлением поля может следовать необязательный тег строкового литерала, который становится атрибутом для всех полей соответствующего полевая декларация. Теги становятся видимыми через отражение интерфейс и принять участие в идентификации типов для структур, но в противном случае игнорируются.
// 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"
}
Это ничего не делает во время компиляции, но используется различными пакетами при анализе времени выполнения структуры. Как уже отмечал Амит, пакет encoding/json
использует его для указания поведения маршаллинга/разборки. То же самое происходит с encoding/xml
, gopkg.in/mgo.v2/bson
и т.д.
Строка тега условно разделяет пробел. Как указано в пакете reflect
:
По соглашению, строки тегов являются конкатенацией опционально ключ, разделенный пробелом: пары "значение". Каждый ключ представляет собой непустую строку состоящий из неконтролируемых символов, кроме пробела (U + 0020 ''), quote (U + 0022 '"') и двоеточие (U + 003A ':'). Каждое значение цитируется с использованием U + 0022 '' 'и синтаксис строкового литерала Go.