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基本上是空的?
答案 0 :(得分:176)
您需要通过大写字段名称中的第一个字母来export TestObject中的字段。将kind
更改为Kind
,依此类推。
type TestObject struct {
Kind string `json:"kind"`
Id string `json:"id,omitempty"`
Name string `json:"name"`
Email string `json:"email"`
}
encoding / json包和类似的包忽略未导出的字段。
字段声明后面的`json:"..."`
字符串为struct tags。此结构中的标记在与JSON进行编组时设置结构字段的名称。
答案 1 :(得分:25)
实施例
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
}
答案 2 :(得分:3)
在golang中
在结构的首字母必须大写 例如电话号码->电话号码
========添加详细信息
首先,我尝试像这样编码
type Questions struct {
id string
questionDesc string
questionID string
ans string
choices struct {
choice1 string
choice2 string
choice3 string
choice4 string
}
}
golang编译不是错误,也不显示警告。但是响应是空的,因为有东西
之后,我搜索google找到了这篇文章
结构类型和结构类型文字 Article然后...我尝试编辑代码。
//Questions map field name like database
type Questions struct {
ID string
QuestionDesc string
QuestionID string
Ans string
Choices struct {
Choice1 string
Choice2 string
Choice3 string
Choice4 string
}
}
正在工作。
希望获得帮助。