какое значение присваивается «bintag» после этой строки «binTag: = field.Tag.Get (« binary »)», где field это одно из структурных полей в GOLang - PullRequest
0 голосов
/ 11 декабря 2018

Я пытался проанализировать программу GO, когда натолкнулся на эту строку
"binTag: = field.Tag.Get (" binary ")"
Меня смутило значение, которое "binTag" будет назначено.

Я искал в GO отражают пакет для объяснения синтаксиса, и я нашел это,

func (tagStructTag) Get (строка ключа) string

Get возвращает значение, связанное с ключом в строке тега.Если в теге нет такого ключа, Get возвращает пустую строку.Если тег не имеет стандартного формата, значение, возвращаемое функцией Get, не указывается.Чтобы определить, явно ли для тега задана пустая строка, используйте Lookup.

Затем я искал значение тега в Golang, в качестве примера я получил это

Тег

После объявления поля может следовать необязательный строковый литерал (тег), который становится атрибутом всех полей в соответствующем объявлении поля.

type T struct {
    f1     string "f one"
    f2     string
    f3     string `f three`
    f4, f5 int64  `f four and five`
}

Итак, теперь я немного запутался в точном значении, назначенном "binTag" после выполнения.

Заранее спасибо.

1 Ответ

0 голосов
/ 11 декабря 2018

См. Документацию StructTag для описания формата тега.

См. Пример StructTag и StructTag.Lookup примеры примеров тегов.

Значение binTag равно "", посколькутег не содержит значения для ключа «двоичный», а также тег не соответствует соглашению о форматировании тегов структуры.

Этот код показывает, как получить доступ к тегу:

v := reflect.TypeOf(T{})
sf, _ := v.FieldByName("f1")
fmt.Println(sf.Tag)               // prints "f one"
fmt.Println(sf.Tag.Get("binary")) // prints blank line

ВотПример с допустимым тегом с ключом «двоичный»:

type U struct {
    g1 string `binary:"hello"`
}

v := reflect.TypeOf(U{})
sf, _ := v.FieldByName("g1")
fmt.Println(sf.Tag)               // prints binary:"hello"
fmt.Println(sf.Tag.Get("binary")) // prints hello
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...