使用gorm插入时,如何从结构中跳过特定字段

使用gorm插入时,如何从结构中跳过特定字段,go,struct,go-gorm,Go,Struct,Go Gorm,我试图为用户注册创建一个RESTAPI,在该API上有一个名为“性别”的字段,所以我将该字段作为Struct接收,但在用户表上没有“性别”字段。使用gorm插入时,是否可以从结构中跳过“性别”字段 这是我的数据模型 package DataModels type User struct { Id uint `json:"id"` Otp int `json:"otp"` UserId s

我试图为用户注册创建一个RESTAPI,在该API上有一个名为“性别”的字段,所以我将该字段作为Struct接收,但在用户表上没有“性别”字段。使用gorm插入时,是否可以从结构中跳过“性别”字段

这是我的数据模型

package DataModels

type User struct {
    Id          uint `json:"id"`
    Otp         int `json:"otp"`
    UserId      string `json:"user_id"`
    UserType    string `json:"user_type"`
    FullName    string `json:"full_name"`
    MobileNo    string `json:"mobile"`
    Email       string `json:"email"`
    Gender      string `json:"gender"` // I want to skip this filed while inserting to users table
    Password    string `json:"password"`
}

func (b *User) TableName() string {
    return "users"
}
这是我的控制器功能

func CreateUser(c *gin.Context) {
    var user Models.User
    _ = c.BindJSON(&user)
    err := Models.CreateUser(&user) // want to skip that gender filed while inserting
    if err != nil {
        fmt.Println(err.Error())
        c.AbortWithStatus(http.StatusNotFound)
    } else {
        c.JSON(http.StatusOK, user)
    }
}
这是我用于插入的模型函数

func CreateUser(user *User) (err error) {
    if err = Config.DB.Create(user).Error; err != nil {
        return err
    }
    return nil
}

GORM允许您忽略带有标记的字段,请使用
GORM:“-”
忽略该字段

type User struct {
    ...
    Gender   string `json:"gender" gorm:"-"` // ignore this field when write and read
}
关于

的官方文档详细信息答案是总是忽略性别,而不仅仅是在创建时

如果我是正确的,您希望跳过注册中的性别字段。你可以用它

db.Omit("Gender").Create(&user)