我試圖將我的代碼分離成模型和序列化器,並提供了處理所有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()
}