【发布时间】:2020-05-19 02:05:57
【问题描述】:
我有一个用户结构,其中包含密码等敏感字段:
type User struct {
UID string `json:"uid" binding:"required"`
Password string `json:"password" binding:"required"`
EmailAddress string `json:"email" binding:"required"`
}
现在我希望能够使用此结构来注册用户并更新、删除以及查看。我不想要的是对密码进行序列化以供查看。当然,我可以制作自定义编组器,但这是唯一的方法吗?我尝试使用 json:"-" 选项,但这会导致它在解组时也被忽略,这是我不想要的。有没有更好的办法?
编辑: 为了让你们中的一些人放心,我当然不会以明文形式存储密码。它是密码的 bcrypt 哈希,但仍然如此。我不希望在搜索用户时返回它。
【问题讨论】:
-
或者您可以使用 2 个结构,一个带有“公共”信息,另一个是“完整”版本,它嵌入了公共并添加了“私人”信息,例如密码。并且在查看时,只发送/序列化嵌入的公共结构。示例见相关问题:Assign struct with another struct.
-
哦,这可能是最接近“优雅”的方式,尤其是现在您可以转换具有不同标签的相同结构。我仍然会将其标记为“自定义封送器”,但它比
JSONMarshaler实现更简单。 -
在 C# 和 Java 中你会使用 DTO 模式