在使用beego框架进行api接口开发遇到的坑
写了一个接口代码如下:
type JsonStruct struct {
code int
msg string
}
type JsonController struct {
beego.Controller
}
func (c *JsonController) Get() {
mystruct := &JsonStruct{0, "hello Json data"}
c.Data["json"] = mystruct
c.ServeJSON()
}
调用接口返回如下:
一脸懵逼,二脸懵逼哦。。。
经过一番百度。。。原因是,结构体中的字段首字母小写无法进行json解析
修改代码如下
type JsonStruct struct {
Code int
Msg string
}
type JsonController struct {
beego.Controller
}
func (c *JsonController) Get() {
mystruct := &JsonStruct{0, "hello Json data"}
c.Data["json"] = mystruct
c.ServeJSON()
}
调用结果终于正常了
总结一下:
Go语言通过首字母的大小写来控制访问权限。无论是方法,变量,常量或是自定义的变量类型,如果首字母大写,则可以被外部包访问,反之则不可以。
而结构体中的字段名,如果首字母小写的话,则该字段无法被外部包访问和解析,比如此处无法返回json数据。
延伸一下:
如果想要得到小写的如下的返回数据
可以修改代码如下:
type JsonStruct struct {
Code int `json:"code"`
Msg string `json:"msg"`
}
type JsonController struct {
beego.Controller
}
func (c *JsonController) Get() {
mystruct := &JsonStruct{0, "hello Json data"}
c.Data["json"] = mystruct
c.ServeJSON()
}
这种方式相当于别名,可以自定义自己需要的字段名字