我试图将我的代码分离成模型和序列化器,并提供了处理所有json职责(即关注点分离)的定义序列化器。我也希望能够调用一个模型对象obj.Serialize()
来获得串行器结构obj,然后我可以编组。因此,我想出了以下设计。为了避免循环导入,我不得不在我的序列化器中使用接口,这导致在我的模型中使用getter。我读过getters/setter不是惯用的go代码,我不希望在我的模型中使用“样板”getter代码。是否有更好的解决方案来实现我想要完成的任务,牢记我需要分离关注点和obj.Serialize()
?在Golang中序列化模型
src/
models/
a.go
serializers/
a.go
models/a.go
import "../serializers"
type A struct {
name string
age int // do not marshal me
}
func (a *A) Name() string {
return a.name
}
// Serialize converts A to ASerializer
func (a *A) Serialize() interface{} {
s := serializers.ASerializer{}
s.SetAttrs(a)
return s
}
serializers/a.go
// AInterface used to get Post attributes
type AInterface interface {
Name() string
}
// ASerializer holds json fields and values
type ASerializer struct {
Name `json:"full_name"`
}
// SetAttrs sets attributes for PostSerializer
func (s *ASerializer) SetAttrs(a AInterface) {
s.Name = a.Name()
}