嗨,我正在学习Go语言,我想问如何创建空的Object/Struct作为域模型数据类型?我使用Fiber作为我的框架,下面是我想从golang响应api中得到的东西的例子:
{
"success": true,
"message": "Success registered",
"data": {
"first_name": "asdfa",
"last_name": "asdfa",
"email": "fadsfa",
"password": "asdfasfas"
}
}
这是我的尝试,这是我对谷歌的回应:
type ResponseDto struct {
Success bool `json:"success"`
Message string `json:"message"`
Data fiber.Map `json:"data"`
}
下面是我的控制器的样子:
func Register(c *fiber.Ctx) error {
user := request.UserRequest{}
//do something then return
return c.JSON(models.ResponseDto{
Success: false,
Message: "Success registered",
Data: fiber.Map{
"data": user,
},
})
}
然后是响应:
{
"success": false,
"message": "Success registered",
"data": {
"data": {
"first_name": "asdfa",
"last_name": "asdfa",
"email": "fadsfa",
"password": "asdfasfas"
}
}
}
正如你所看到的,我会有嵌套的数据,但我不希望它被嵌套,我希望它只嵌套一层,就像我的例子一样。我怎样才能做到这一点?我应该使用什么数据类型,以及如何使用它来分配值?
您必须"转换";用户到光纤。映射
func Register(c *fiber.Ctx) error {
user := request.UserRequest{}
//do something then return
return c.JSON(models.ResponseDto{
Success: false,
Message: "Success registered",
Data: fiber.Map{
"user_name": user.Name,
"user_age": user.Age,
},
})
}
或者您可以将ResponseD更改为
type ResponseDto struct {
Success bool `json:"success"`
Message string `json:"message"`
Data request.UserRequest `json:"data"`
}
如果你不想要嵌套的数据,就不要嵌套它。如果这听起来像同义词,很抱歉,但我不知道如何解决它。
具体来说:如果data
是request.UserRequest
,则将其添加为结构字段:
type ResponseDto struct {
Success bool `json:"success"`
Message string `json:"message"`
Data request.UserRequest `json:"data"`
}
但这会将您的请求和响应模型结合起来如果你想避免这种情况(我想(,你必须忍受一些更详细的代码,并逐个设置fiber.Map
条目。不,不能对结构字段进行迭代。通过定义一个专用类型:,您可以使代码更有表现力
type UserMap fiber.Map
type ResponseDto struct {
Success bool `json:"success"`
Message string `json:"message"`
Data UserMap `json:"data"`
}
resp := ResponseDto{
Success: false,
Message: "Success registered",
Data: UserMap{
"first_name": user.FirstName,
// ...and so on
},
}