4 回答

TA貢獻(xiàn)1765條經(jīng)驗 獲得超5個贊
假設(shè)您正在使用戈爾姆。首先在數(shù)據(jù)庫中創(chuàng)建一個類型。
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貢獻(xiàn)1828條經(jīng)驗 獲得超4個贊
在旁注中 - 如果您決定采用稍微不同的方法:您可以將枚舉定義為int,并利用.然后,您可以使用代碼生成器來創(chuàng)建sql,也可以創(chuàng)建json /文本表示形式。例如:https://github.com/dmarkham/enumeriota
Scaner/Valuer

TA貢獻(xiàn)1829條經(jīng)驗 獲得超7個贊
為了擴(kuò)展Nick的答案,我為自動化添加了以下內(nèi)容:
假設(shè)您有結(jié)構(gòu),則可以創(chuàng)建一個創(chuàng)建此汽車類型的方法: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
}
}

TA貢獻(xiàn)1934條經(jīng)驗 獲得超2個贊
更新,它將不工作,而是使用 。一旦您在數(shù)據(jù)庫中手動創(chuàng)建了自定義枚舉類型,也是如此。sql:"car_type"
gorm:"car_type"
- 4 回答
- 0 關(guān)注
- 282 瀏覽
添加回答
舉報