формат JSON.Маршал (структура) возвращает "{}"
type TestObject struct {
kind string `json:"kind"`
id string `json:"id, omitempty"`
name string `json:"name"`
email string `json:"email"`
}
func TestCreateSingleItemResponse(t *testing.T) {
testObject := new(TestObject)
testObject.kind = "TestObject"
testObject.id = "f73h5jf8"
testObject.name = "Yuri Gagarin"
testObject.email = "Yuri.Gagarin@Vostok.com"
fmt.Println(testObject)
b, err := json.Marshal(testObject)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(b[:]))
}
вот вывод:
[ `go test -test.run="^TestCreateSingleItemResponse$"` | done: 2.195666095s ]
{TestObject f73h5jf8 Yuri Gagarin Yuri.Gagarin@Vostok.com}
{}
PASS
почему JSON по существу пуст?
2 ответа:
вам нужно экспорт поля в TestObject путем заглавной буквы в имени Поля. Изменить
kind
toKind
и так далее.type TestObject struct { Kind string `json:"kind"` Id string `json:"id,omitempty"` Name string `json:"name"` Email string `json:"email"` }
пакет encoding/json и аналогичные пакеты игнорируют несообщенные поля.
The
`json:"..."`
строки, следующие за объявлениями полей, являются теги структуры. Теги в этой структуре задают имена полей структуры при маршалинге В и из формат JSON.
- когда первая буква С большой буквы, идентификатор является общедоступным для любого кусок кода, который вы хотите использовать.
- когда первая буква строчные буквы, идентификатор является частным и доступ возможен только в пределах пакета, который был объявлен.
примеры
var aName // private var BigBro // public (exported) var 123abc // illegal func (p *Person) SetEmail(email string) { // public because SetEmail() function starts with upper case p.email = email } func (p Person) email() string { // private because email() function starts with lower case return p.email }