如何解决golang:嵌套结构到嵌套 json 或 json
我正在尝试将 ddd 概念应用到我的 go 项目中
然后我有一个带有嵌套结构的实体,如下所示:
type Person struct {
Id string
Name valueObject.Name
Email valueObject.Email
Password valueObject.Password
Created time.Time
Updated time.Time
}
func NewPerson(name valueObject.Name,email valueObject.Email,password valueObject.Password) *Person {
return &Person{
Id: "a",Name: name,Email: email,Password: password,Created: time.Now(),Updated: time.Now(),}
}
我所有的对象值都有类似的结构:
type Email struct {
address string
}
func NewEmail(address string) (Email,error) {
isValid := valid(address)
if !isValid {
return Email{},ErrEmail
}
return Email{address},nil
}
func (e Email) Value() string {
return e.address
}
func (e Email) Format() string {
return strings.Trimspace(strings.ToLower(e.Value()))
}
func (e Email) Equals(e2 Email) bool {
return e.Value() == e2.Value()
}
然后因为我有一个嵌套的结构,我想创建一个 ToJSON 函数来返回我的数据,我还需要排除一些作为密码的返回:
type personjson struct {
id string
name string
email string
createdAt time.Time
updatedAt time.Time
}
func (p *Person) ToJSON() personjson {
email := p.Email.Value()
name := p.Name.FullName()
person := personjson{id: "dasdas",email: email,name: name,createdAt: p.Created,updatedAt: p.Updated}
return person
}
但随后在我的控制器中我尝试访问它,或者当我返回此 ToJSON 时总是作为 {}:
type createPersonDTO struct {
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
Password string `json:"password"`
Email string `json:"email"`
}
func (*PersonController) CreateNewPerson(ctx *fiber.Ctx) error {
var dto createPersonDTO
if err := ctx.BodyParser(&dto); err != nil {
return utils.CtxError(ctx,http.StatusUnprocessableEntity,err)
}
email,err := valueObjects.NewEmail(dto.Email)
if err != nil {
return utils.CtxError(ctx,err)
}
name,err := valueObjects.NewName(dto.FirstName,dto.LastName)
if err != nil {
return utils.CtxError(ctx,err)
}
password,err := valueObjects.NewPassword(dto.Password)
if err != nil {
return utils.CtxError(ctx,err)
}
person := entities.NewPerson(name,email,password)
return ctx.Status(http.StatusOK).JSON(person.ToJSON())
}
我的 res.body 总是一个空的 json