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 關注
- 308 瀏覽
添加回答
舉報
