Это работает, как если бы вы полностью удалили недействительный тег:
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>