📅  最后修改于: 2023-12-03 15:15:24.945000             🧑  作者: Mango
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类型可以避免手动验证枚举值是否合法的麻烦,并且可以支持更加复杂的枚举类型。