如何在Struct内部声明空Object/Struct之类的东西



嗨,我正在学习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"`
}

如果你不想要嵌套的数据,就不要嵌套它。如果这听起来像同义词,很抱歉,但我不知道如何解决它。

具体来说:如果datarequest.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
},
}

相关内容

  • 没有找到相关文章

最新更新