我用过gorm库。
gorm支持将结构数据插入数据库并返回。
但是我的服务并不总是需要每个struct成员。
例如;
/ Address =>此api将仅返回用户地址。
但是orm返回所有struct成员。
像这样
type User {
Name string
Address string
}
db.find(&user)
apiResponse(200,user)
所以我总是为特定的api返回形状创建序列化程序代码。
type Serializer {
Address string
}
func MakeSerializer(User u) Serializer {
return Serilizer { Address: u.Address }
}
但是上述代码不好。
因为大多数Api返回形状都不同。因此,我将需要大量的serilzer代码。
告诉我有关此问题的最佳实践。
谢谢你
答案 0 :(得分:3)
您可以使用json:"-"
标记从结构的JSON序列化中删除字段,但是我更喜欢对数据库层和rest接口使用不同的结构。
类似这样的东西:
type Construction struct {
gorm.Model
Name string `gorm:"size:30;unique_index"`
Description string `gorm:"size:100"`
}
type Construction struct {
Id uint `json:"Id"`
Name string `json:"Name"`
Description string `json:"Description"`
Additions string `json:"Additions"`
}
func setConstructionFields(ct types.Construction, construction *models.Construction, additions string) types.Construction {
ct.Name = construction.Name
ct.Description = construction.Description
ct.Additions = additions
return ct
}
在这种情况下,您需要具有两个结构,而不是一个,并且需要编写一个函数来转换一个结构或另一个结构,但是当您处理数据时,您将具有更大的灵活性,并且数据库层将与其余服务的连接较少层。
答案 1 :(得分:2)
我想您将响应序列化为JSON。 This解决了您的问题。为了始终跳过字段序列化,只需添加json:"-"
。
type User {
Name string
Address string `json:"-"`
}