在 Golang Gorm 中隐藏字段
Hide fields in Golang Gorm
我在我的 Golang 项目中使用 Gorm。确切地说,我有一个 Rest-API 并且我收到一个请求使进程和 return 成为一个对象,所以,例如我有一个这样的结构用户:
type User struct {
gorm.Model
Password []byte
Active bool
Email string
ActivationToken string
RememberPasswordToken string
}
现在,当我创建一个用户时,我将其编码为 JSON 并使用:
json.NewEncoder(w).Encode(user)
但在客户端,我收到了一些我不想 send/receive 的字段,例如:Created_At、Deleted_At、Updated_At、密码。那么,在响应中忽略或隐藏该字段的最佳方法是什么?我看到我可以使用一个名为 Reflect 的库,但对于一个简单的事情来说似乎需要做很多工作,我想知道是否还有其他方法。非常感谢
正如 Gavin 所说,我建议使用两个独立的模型并赋予模型转换为正确 return 类型的能力。
models/user.go
package models
type User struct {
gorm.Model
Password []byte
Active bool
Email string
ActivationToken string
RememberPasswordToken string
}
func (u *User) UserToUser() app.User {
return app.User{
Email: u.Email
}
}
app/user.go
package app
type User struct {
Email string
}
如果你想有一个固定对象到return,你可以用json:"-"
改变标签来决定用json发送的元素。
对于 gorm.Model 中的元素:
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time `sql:"index"`
}
您可以用它们替换您自己的结构:
type OwnModel struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time `json:"-"`
UpdatedAt time.Time `json:"-"`
DeletedAt *time.Time `json:"-";sql:"index"`
}
所以,你的用户结构应该是这样的:
type User struct {
OwnModel
Password []byte
Active bool
Email string
ActivationToken string
RememberPasswordToken string
}
The other User fields is your decision to add or not `json:"-"` tag.
对我来说帮助添加 json:"-"
到 gorm.Model
例如:
type User struct {
gorm.Model `json:"-"`
Password []byte
Active bool
Email string
ActivationToken string
RememberPasswordToken string
}
我在我的 Golang 项目中使用 Gorm。确切地说,我有一个 Rest-API 并且我收到一个请求使进程和 return 成为一个对象,所以,例如我有一个这样的结构用户:
type User struct {
gorm.Model
Password []byte
Active bool
Email string
ActivationToken string
RememberPasswordToken string
}
现在,当我创建一个用户时,我将其编码为 JSON 并使用:
json.NewEncoder(w).Encode(user)
但在客户端,我收到了一些我不想 send/receive 的字段,例如:Created_At、Deleted_At、Updated_At、密码。那么,在响应中忽略或隐藏该字段的最佳方法是什么?我看到我可以使用一个名为 Reflect 的库,但对于一个简单的事情来说似乎需要做很多工作,我想知道是否还有其他方法。非常感谢
正如 Gavin 所说,我建议使用两个独立的模型并赋予模型转换为正确 return 类型的能力。
models/user.go
package models
type User struct {
gorm.Model
Password []byte
Active bool
Email string
ActivationToken string
RememberPasswordToken string
}
func (u *User) UserToUser() app.User {
return app.User{
Email: u.Email
}
}
app/user.go
package app
type User struct {
Email string
}
如果你想有一个固定对象到return,你可以用json:"-"
改变标签来决定用json发送的元素。
对于 gorm.Model 中的元素:
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time `sql:"index"`
}
您可以用它们替换您自己的结构:
type OwnModel struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time `json:"-"`
UpdatedAt time.Time `json:"-"`
DeletedAt *time.Time `json:"-";sql:"index"`
}
所以,你的用户结构应该是这样的:
type User struct {
OwnModel
Password []byte
Active bool
Email string
ActivationToken string
RememberPasswordToken string
}
The other User fields is your decision to add or not `json:"-"` tag.
对我来说帮助添加 json:"-"
到 gorm.Model
例如:
type User struct {
gorm.Model `json:"-"`
Password []byte
Active bool
Email string
ActivationToken string
RememberPasswordToken string
}