golang gorm tag

发布时间:2024-12-22 23:35:07

Golang GORM 标签详解

在 Golang 开发中,GORM 是一款非常流行的对象关系映射(Object Relational Mapping)库。它提供了方便的数据库操作功能,并且支持丰富的标签语法,用于定义结构体字段与数据库表的映射关系。

1. gorm:"primaryKey"

这个标签用于指定某个字段作为主键。例如:

type User struct {
    gorm.Model
    ID       uint   `gorm:"primaryKey"`
    Username string
    Password string
}

上述代码中,ID 字段被标记为主键。

2. gorm:"column:custom_column_name"

这个标签用于指定字段对应的数据库列名。例如:

type User struct {
    gorm.Model
    ID       uint   `gorm:"primaryKey;column:user_id"`
    Username string
    Password string
}

上述代码中,ID 字段对应的数据库列名被指定为 user_id。

3. gorm:"autoCreateTime"

这个标签用于指定某个时间字段在创建时自动生成时间戳。例如:

type User struct {
    gorm.Model
    ID        uint   `gorm:"primaryKey"`
    Username  string
    Password  string
    CreatedAt time.Time `gorm:"autoCreateTime"`
}

上述代码中,CreatedAt 字段在创建时会自动填充当前时间。

4. gorm:"autoUpdateTime"

这个标签用于指定某个时间字段在更新时自动更新时间戳。例如:

type User struct {
    gorm.Model
    ID        uint   `gorm:"primaryKey"`
    Username  string
    Password  string
    UpdatedAt time.Time `gorm:"autoUpdateTime"`
}

上述代码中,UpdatedAt 字段在更新时会自动更新为当前时间。

5. gorm:"uniqueIndex"

这个标签用于指定某个字段创建唯一索引。例如:

type User struct {
    gorm.Model
    ID       uint   `gorm:"primaryKey"`
    Username string `gorm:"uniqueIndex"`
    Password string
}

上述代码中,Username 字段创建了一个唯一索引。

6. gorm:"not null"

这个标签用于指定某个字段不为空。例如:

type User struct {
    gorm.Model
    ID       uint   `gorm:"primaryKey"`
    Username string `gorm:"not null"`
    Password string
}

上述代码中,Username 字段被设置为非空。

7. gorm:"type:custom_data_type"

这个标签用于指定某个字段对应的数据库数据类型。例如:

type User struct {
    gorm.Model
    ID       uint   `gorm:"primaryKey"`
    Username string `gorm:"type:varchar(100)"`
    Password string
}

上述代码中,Username 字段被指定为 varchar(100) 类型。

8. gorm:"default:custom_default_value"

这个标签用于指定某个字段的默认值。例如:

type User struct {
    gorm.Model
    ID       uint   `gorm:"primaryKey"`
    Username string `gorm:"default:'guest'"`
    Password string
}

上述代码中,Username 字段的默认值被指定为 "guest"。

通过使用这些 GORM 标签,我们可以灵活地定义结构体字段与数据库表的映射关系,并且减少了手动编写大量的 CRUD 操作代码的工作量。

相关推荐