如何解决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

解决方法