4 回答
TA贡献1765条经验 获得超5个赞
假设您正在使用戈尔姆。首先在数据库中创建一个类型。
CREATE TYPE car_type AS ENUM (
'SEDAN',
'HATCHBACK',
'MINIVAN');
然后,您需要定义以下模型:
import "database/sql/driver"
type carType string
const (
SEDAN carType = "SEDAN"
HATCHBACK carType = "HATCHBACK"
MINIVAN carType = "MINIVAN"
)
func (ct *carType) Scan(value interface{}) error {
*ct = carType(value.([]byte))
return nil
}
func (ct carType) Value() (driver.Value, error) {
return string(ct), nil
}
type MyTable struct {
gorm.Model
CarType carType `sql:"car_type"`
}
func (MyTable) TableName() string {
return "my_table"
}
TA贡献1828条经验 获得超4个赞
在旁注中 - 如果您决定采用稍微不同的方法:您可以将枚举定义为int,并利用.然后,您可以使用代码生成器来创建sql,也可以创建json /文本表示形式。例如:https://github.com/dmarkham/enumeriotaScaner/Valuer
TA贡献1829条经验 获得超7个赞
为了扩展Nick的答案,我为自动化添加了以下内容:
假设您有结构,则可以创建一个创建此汽车类型的方法:DBClient
func (psqlClient *DBClient) CreateCarTypeEnum() error {
result := psqlClient.db.Exec("SELECT 1 FROM pg_type WHERE typname = 'car_type';")
switch {
case result.RowsAffected == 0:
if err := psqlClient.db.Exec("CREATE TYPE car_type AS ENUM ('SEDAN', 'HATCHBACK', 'MINIVAN');").Error; err != nil {
log.Error().Err(err).Msg("Error creating car_type ENUM")
return err
}
return nil
case result.Error != nil:
return result.Error
default:
return nil
}
}
- 4 回答
- 0 关注
- 303 浏览
添加回答
举报
