json тег без запуска двойной кавычки сработал - PullRequest
0 голосов
/ 18 января 2020

У меня есть структура с json тегами. Один из них был без начала двойных кавычек. Во время тестирования это работало. Интересно почему и есть ли инструмент для ловли таких опечаток?

type req struct {
    Name        string `json:name"`
}

Я на go1.13 linux/amd64.

1 Ответ

3 голосов
/ 18 января 2020

Это работает, как если бы вы полностью удалили недействительный тег:

type req struct {
    Name string
}

Цитирование из json.Marhsal():

Структурные значения кодируются как JSON предметов. Каждое экспортированное структурное поле становится членом объекта, используя имя поля в качестве ключа объекта, если только поле не опущено по одной из приведенных ниже причин.

Если у вас есть недопустимый тег, это считается как тэг, а имя поля используется по умолчанию.

go vet сообщает о тэгах, которые не соответствуют «соглашению», указанному в reflect.StructTag:

По соглашению, строки тегов представляют собой конкатенацию необязательно разделенных пробелами пар «значение». Каждый ключ является непустой строкой, состоящей из неуправляемых символов, кроме пробела (U + 0020 ''), кавычки (U + 0022 '"') и двоеточия (U + 003A ':'). Каждое значение заключено в кавычки используя U + 0022 '"' символов и Go строковый буквальный синтаксис.

Запуск его на Go Playground (который также запускается go vet):

./prog.go:9:2: struct field tag `json:name"` not compatible with reflect.StructTag.Get: bad syntax for struct tag value
Go vet exited.

{"Name":"john"} <nil>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...