首页 > 解决方案 > 用于声明字符串默认值的sql struct标签语法

问题描述

对于字符串类型,我是否需要用 qoutes ( '' ) 括起来

type Car struct {
    Transmission             string `gorm:"column:transmission" sql:"DEFAULT:'manual'" json:"transmission"`
}
type Car struct {
    Transmission             string `gorm:"column:transmission" sql:"DEFAULT:manual" json:"transmission"`
}

在 db 中,data_type 是 ENUM

标签: gogo-gorm

解决方案


您可以使用 gorm struct 标记设置默认值 - 我发现 gorm 会忽略 SQL struct 标记(使用 mariadb):

type Car struct {
    gorm.Model
    Transmission string `gorm:"default:manual"`
}

或者您可以在运行时添加一些类型检查:

type Transmission string

const (
    Automatic Transmission = "automatic"
    Manual    Transmission = "manual"
)

func (t *Transmission) Scan(value interface{}) error {
    *t = Transmission(value.([]byte))
    return nil
}

func (t Transmission) Value() (driver.Value, error) {
    return string(t), nil
}

type Car struct {
    gorm.Model
    Transmission Transmission `gorm:"default:manual"`
}

无论哪种方式 - 我必须直接在 mariadb 中定义枚举,它不会通过 gorm 的自动迁移功能生成枚举。

create table demo.cars (
    transmission enum('automatic', 'manual') default 'manual' not null
);

推荐阅读