Go 如何从对象中删除属性
我有一个用户结构:Go 如何从对象中删除属性,go,go-gorm,go-gin,Go,Go Gorm,Go Gin,我有一个用户结构: type User struct { gorm.Model Email string Password string AccountType int CompanyId int FirstName string LastName string PhoneNumber string RecoveryEmail string Contract
type User struct {
gorm.Model
Email string
Password string
AccountType int
CompanyId int
FirstName string
LastName string
PhoneNumber string
RecoveryEmail string
Contractor bool `gorm:"sql:'not null' default:'false'"`
}
我使用此结构使用gorm从数据库中获取一行:
我的杜松子酒:
// @Summary Attempts to get a existing user by id
// @tags users
// @Router /api/users/getUserById [get]
func HandleGetUserById(c *gin.Context) {
// Were using delete params as it shares the same interface.
var json deleteParams
if err := c.Bind(&json); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"message": "No user ID found, please try again."})
return
}
outcome, err := getUser(json.Id)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"message": "Something went wrong while trying to process that, please try again.", "error": err.Error()})
log.Println(err)
return
}
c.JSON(http.StatusOK, gin.H{
"message": "Successfully found user",
"user": outcome,
})
}
它返回一切正常,但当我返回&user时,未选择的字段将返回默认值:
{
"message": "Successfully found user",
"user": {
"ID": 53,
"CreatedAt": "2018-06-24T00:05:49.761736+01:00",
"UpdatedAt": "0001-01-01T00:00:00Z",
"DeletedAt": null,
"Email": "jack@jackner.com",
"Password": "",
"AccountType": 0,
"CompanyId": 2,
"FirstName": "",
"LastName": "",
"PhoneNumber": "",
"RecoveryEmail": "",
"Contractor": false
}
}
是否有办法从对象中删除空或空属性?或者,我必须将映射到所述新对象的值发送回一个对象吗?如果有一种简单的方法可以使用helper函数实现前者,我想知道如何实现。您可以在对象的字段定义中指定省略空标记
例如:
Email string `json:",omitempty"`
如果以这种方式定义字段,JSON输出中将不存在空值:
omitempty选项指定,如果字段具有空值(定义为false、0、nil指针、nil接口值)以及任何空数组、切片、映射或字符串,则应在编码中省略该字段
您会因为更新工作流而询问吗,例如,获取对象、修改字段,并且不想用这些零值更新/覆盖字段?@dm03514更新工作流在我的其他方法中按预期工作,我不介意默认值,我只是不想用每个表键从api发送整个对象,即使是空的,我想我也在努力避免只返回一个映射对象。我更喜欢编辑我的指针,然后只为输出返回它。我已经更新了我的问题,将gin处理程序也包括在内,以便为我当前正在执行的整个过程提供更好的上下文。您的字段为空。如果希望它们为null,则需要一个能够为null的字段。字符串不能为空。字符串指针可以是。@Patrick如果您在响应中看到,即使属性为null,它也不会从对象中删除,我希望删除这些属性,以便它可以在返回时作为json发送回去,我不认为简单地将它们设置为可为null的类型会改变这一点,根据描述,我将尝试一下。这正是我一直在寻找的,但在gorm手册中找不到的,非常感谢您的回答。
Email string `json:",omitempty"`