首页 文章

隐藏Golang Gorm中的字段

提问于
浏览
1

我在Golang项目中使用Gorm . 我有一个Rest-API,我得到一个请求来制作进程并返回一个对象,所以,例如我有一个像这样的结构用户:

type User struct {
    gorm.Model
    Password []byte
    Active bool
    Email string
    ActivationToken string
    RememberPasswordToken string
}

现在,当我创建一个用户时,我将其编码为JSON:

json.NewEncoder(w).Encode(user)

但在客户端,我收到一些我不想发送/接收的字段,例如:Created_At,Deleted_At,Updated_At,Password . 那么,忽略或隐藏响应中的字段的最佳方法是什么?我看到我可以使用一个名为Reflect的库,但是对于一个简单的事情似乎有很多工作,我想知道是否有另一种方法 . 非常感谢你

3 回答

  • 1

    正如Gavin所说,我建议使用两个独立的模型,并使模型能够转换为正确的返回类型 .

    车型/ 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
        }
    }
    

    应用程序/ user.go

    package app
    
    type User struct {
        Email string
    }
    
  • 2

    如果要返回固定对象,可以使用 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"`
    }
    

    所以,你的User结构就是这样的:

    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.
    
  • 0

    对我来说帮助将 json:"-" 添加到gorm.Model

    例如:

    type User struct {
        gorm.Model `json:"-"`
        Password []byte
        Active bool
        Email string
        ActivationToken string
        RememberPasswordToken string
    }
    

相关问题