📜  gorm 枚举 (1)

📅  最后修改于: 2023-12-03 15:15:24.945000             🧑  作者: Mango

GORM 枚举介绍

GORM(Go语言的ORM框架)的枚举是一种特殊的数据类型,用于保存固定的值列表。在Go语言中,不像其他语言可以直接定义枚举类型,但可以使用常量或iota实现枚举。

GORM提供了Enum类型,其实是将数据库的enum类型进行了封装,可以方便的操作枚举类型的数据。

创建枚举类型

在GORM中创建枚举类型时,需要使用Enum类型。下面是一个例子:

type Gender string

const (
    Male   Gender = "male"
    Female Gender = "female"
)

type User struct {
    ID     uint
    Name   string
    Gender Gender `gorm:"type:enum('male', 'female')"`
}

在这个例子中,我们定义了一个Gender类型,Type为string类型,常量中包含了Male和Female两个枚举值。在用户结构体中使用Gender类型,并设置了为数据库的枚举类型,即type:enum('male', 'female')。

快速扩展

GORM枚举类型可以很方便地扩展。例如,我们要添加Unknown枚举值,只需要在常量中添加即可:

const (
    Male   Gender = "male"
    Female Gender = "female"
    Unknown Gender = "unknown"
)

然后在数据库中添加枚举值即可。

同时,也可以在常量中定义多个枚举值:

type Status string

const (
    Pending Status = "pending"
    Active  Status = "active"
    Disable Status = "disable"
    Expire  Status = "expire"
)
查询和更新枚举类型

查询和更新枚举类型时,虽然Go语言中没有枚举类型,但是可以使用字符串代替:

// 查询male的用户
db.Where("gender = ?", "male").Find(&users)

// 更新用户的性别为female
db.Model(&user).Update("gender", "female")
总结

GORM枚举类型是方便在Go语言中操作枚举类型的方式,同时也使得代码更加清晰。使用GORM的Enum类型可以避免手动验证枚举值是否合法的麻烦,并且可以支持更加复杂的枚举类型。